example python tornado

python - example - ¿Qué es el ioloop tornado y el flujo de trabajo del tornado?



python tornado example (1)

Veré si puedo responder a tus preguntas en orden:

  • Aquí _impl es el mecanismo de sondeo de socket disponible, epoll en Linux, select en Windows. De modo que self._impl.register(fd, events | self.ERROR) pasa la solicitud de "espera de algún evento" al sistema operativo subyacente, que también incluye específicamente los eventos de error.

    Cuando se ejecuta, el HTTPServer registrará sockets para aceptar conexiones, utilizando IOLoop.add_handler() . Cuando se aceptan las conexiones, generarán más sockets de comunicación, lo que probablemente también agregará controladores de eventos a través de un IOStream , que también puede llamar a add_handler() . Por lo tanto, los nuevos controladores se agregarán al principio y cuando se reciban las conexiones.

  • Sí, cada nueva conexión de socket tendrá un descriptor de archivo único. Sin embargo, el socket original que está escuchando el HTTPServer debería mantener su descriptor de archivo. Los descriptores de archivos son proporcionados por el sistema operativo.

  • IOLoop maneja los eventos relacionados con los sockets, por ejemplo, si tienen datos disponibles para leer, si pueden escribirse y si se ha producido un error. Al utilizar servicios de sistemas operativos como epoll o select , puede hacerlo de manera muy eficiente.

    Un IOStream maneja la transmisión de datos a través de una sola conexión, y usa IOLoop para hacer esto de forma asíncrona. Por ejemplo, un IOStream puede leer tantos datos como estén disponibles, luego usar IOLoop.add_handler() para esperar hasta que haya más datos disponibles.

  • En listen() , el HTTPServer crea un socket que utiliza para escuchar las conexiones que utilizan IOLoop . Cuando se obtiene una conexión, usa socket.accept() para crear un nuevo socket que luego se usa para comunicarse con el cliente usando una nueva HTTPConnection .

    La HTTPConnection utiliza un IOStream para transferir datos hacia o desde el cliente. Este IOStream usa IOLoop para hacer esto de forma asíncrona y sin bloqueo. Muchos objetos IOStream y HTTPConnection pueden estar activos a la vez, todos utilizando el mismo IOLoop .

Espero esto conteste algunas de sus preguntas. No conozco un buen gráfico estructural, pero la idea general debería ser bastante similar para otros servidores web también, por lo que podría haber alguna buena información. Ese artículo detallado al que enlazaste parecía bastante útil, así que si comprendes lo suficiente, recomiendo darle otra oportunidad :).

Quiero conocer el flujo de trabajo interno del tornado, y he visto este artículo , es genial, pero es algo que no puedo entender.

dentro del ioloop.py, existe tal función

def add_handler(self, fd, handler, events): """Registers the given handler to receive the given events for fd.""" self._handlers[fd] = handler self._impl.register(fd, events | self.ERROR)

Entonces, ¿qué significa esto? cada solicitud activará add_handler o solo se activará una vez cuando se inicie?

¿Cada conexión de socket generará un descriptor de archivo, o solo se generará una vez?

¿Cuál es la relación entre ioloop y iostream?

¿Cómo funciona httpserver con ioloop y iostream?

¿hay algún diagrama de flujo de trabajo, así que puedo verlo claramente?

perdon por estas questiones, me acabo de confundir

Cualquier enlace, sugerencia, punta ayuda. muchas gracias :)