Red de conocimiento informático - Problemas con los teléfonos móviles - Procesador de análisis de solicitudes de Tomcat y reutilización de solicitudes

Procesador de análisis de solicitudes de Tomcat y reutilización de solicitudes

Interpretación de Tomcat (5) --- Análisis del conector Este artículo explica el comportamiento del conector en BIO y NIO

En este artículo, comenzaremos desde la perspectiva de BIO y HTTP1.1. para leer el código fuente.

Necesita saber que el hilo Aceptador del Conector recibe una nueva conexión (socket) y crea un SocketProcessor para manejar solicitudes posteriores. Si no lo sabe, lea este artículo:

Este artículo explica cómo SocketProcessor maneja las solicitudes posteriores después de recibir una nueva conexión y la reutilización de "Procesador" y "Solicitud". El diagrama es el siguiente:

Después de obtener una nueva conexión, el SocketProcessor se utilizará para procesar una solicitud.

Recordemos un concepto:

Veamos SocketProcessor.run:

El trabajo realizado se resume en lo siguiente:

(sincronizado se usa para sockets sincronizados, después de todo, el socket se entregará entre el SocketProcessor antiguo y el nuevo)

Luego tenemos que analizar handler.run.p> Luego tenemos que analizar el comportamiento de handler.process .

Su método de proceso hereda de AbstractProtocol, analicémoslo:

Para facilitar la explicación, primero presentaré los usos de varias variables/funciones:

recicladoProcessors es una cola concurrente que contiene elementos para procesar la siguiente solicitud. Obtenga el procesador a través decycleProcessors.poll(); (si no hay procesador, créelo llamando a createProcessor()), llame a Processor.process para procesar la siguiente solicitud y finalmente llame a Release(wrapper, procesador, falso, verdadero); para eliminarlo de Eliminar de la cola.

Profundizaré en el punto sobre la liberación (contenedor, procesador, falso, verdadero) restableciendo variables. Echemos un vistazo a Http11Protocol.Http11ConnectionHandler.release:

Agregué comentarios que explican qué hacen estas dos líneas de llamadas a funciones. El tipo de procesador es Http11Processor, pero el reciclaje se implementa en la clase principal AbstractHttp11Processor:

La función es aproximadamente la siguiente:

Es decir, al llamar a recycle(), configúrelo en - 1 o falso, reciclaje(), lo establece en -1 o falso, liberando, liberando.falso, restablece un montón de variables a su estado original, pero no libera memoria en la matriz asociada. Si aún no estás seguro del comportamiento de recycle() , puedes rastrearlo tú mismo para no tener que dedicar demasiado tiempo aquí.

Usemos getInputBuffer().recycle(); y miremos el código fuente de AbstractInputBuffer.recycle:

Esto implica el reinicio de la solicitud. Indica que la solicitud ha sido recogida y reciclada.

El artículo establece claramente lo siguiente: