java - ¿Cómo maneja un solo servlet múltiples solicitudes desde el lado del cliente?
multithreading servlets (3)
Cada solicitud se procesa en un hilo separado. Esto no significa que Tomcat crea un hilo por solicitud. Hay un conjunto de hilos para procesar las solicitudes. También hay una instancia única para cada servlet y este es el caso predeterminado. ( Más información ). Tu servlet debe ser Thread Safe
.
Si su servlet implementa la interfaz SingleThreadModel
, cada hilo usa una instancia separada del servlet. SingleThreadModel
está en desuso , no lo use.
Hice esta respuesta como wiki de la comunidad.
¿Cómo maneja un solo servlet múltiples solicitudes de clientes que vienen en forma de solicitudes de usuarios? Según el patrón de diseño de singleton, sé que se crea una única instancia de servlet, pero cómo un único servlet maneja millones de solicitudes. Confundido acerca de los hilos involucrados en él también.
Además, ¿las especificaciones o configuraciones del navegador son útiles aquí para enviar las solicitudes o generar los subprocesos enviados para las solicitudes?
¿Es el mismo para todos los marcos o difiere, por ejemplo, puntales v / s resortes?
Los marcos de Struts / Spring en realidad se escriben sobre la especificación de Servlet, por lo que no importa lo que uses debajo, utiliza Servlets.
Tiene razón, solo se crea una única instancia de Servlet, pero esa instancia se comparte en varios subprocesos. Por esta razón, nunca debería haber compartido estados mutables en sus Servlets.
Por ejemplo, tiene el siguiente servlet asignado a http://localhost/myservlet
class MySerlvet extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse res) {
// Get Logic
}
}
El servidor web tendrá algo similar (no necesariamente igual) en su código.
MyServlet m = new MyServlet(); // This will be created once
// for each request for http://localhost/myservlet
executorService.submit(new RequestProcessingThread(m));
No creas múltiples instancias de servlet. El motor de servlet crea un subproceso independiente para cada solicitud (hasta un número máximo de subprocesos) El rendimiento está relacionado con el número de subprocesos, no con el número de instancias del servlet.
Por ejemplo, si hay 1000 solicitudes y el número máximo de subprocesos que puede generar el servlet es 100, habrá una degradación del rendimiento.
Para evitar este problema, podemos usar el equilibrador de carga poniendo varios servidores detrás de un equilibrador de carga. El equilibrador de carga debe configurarse para "enrutar" las solicitudes a cualquiera de los servidores en función de diferentes parámetros / configuraciones (distribución de turno rotativo, distribución de carga, etc.). Cuanta más carga necesite, más servidores deberá agregar. Sin embargo, esto envía todo el tráfico a través del equilibrador de carga, por lo que es importante que sea redundante y seguro contra fallas.