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í
_imples el mecanismo de sondeo de socket disponible,epollen Linux,selecten Windows. De modo queself._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
HTTPServerregistrará sockets para aceptar conexiones, utilizandoIOLoop.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 unIOStream, que también puede llamar aadd_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
HTTPServerdebería mantener su descriptor de archivo. Los descriptores de archivos son proporcionados por el sistema operativo.IOLoopmaneja 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 comoepolloselect, puede hacerlo de manera muy eficiente.Un
IOStreammaneja la transmisión de datos a través de una sola conexión, y usaIOLooppara hacer esto de forma asíncrona. Por ejemplo, unIOStreampuede leer tantos datos como estén disponibles, luego usarIOLoop.add_handler()para esperar hasta que haya más datos disponibles.En
listen(), elHTTPServercrea un socket que utiliza para escuchar las conexiones que utilizanIOLoop. Cuando se obtiene una conexión, usasocket.accept()para crear un nuevo socket que luego se usa para comunicarse con el cliente usando una nuevaHTTPConnection.La
HTTPConnectionutiliza unIOStreampara transferir datos hacia o desde el cliente. EsteIOStreamusaIOLooppara hacer esto de forma asíncrona y sin bloqueo. Muchos objetosIOStreamyHTTPConnectionpueden estar activos a la vez, todos utilizando el mismoIOLoop.
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 :)