2012-05-14 24 views
23

He estado trabajando con aplicaciones web de primavera utilizando el servidor de aplicaciones jetty/tomcat durante aproximadamente dos años, sin embargo, lo que aún me falta es cómo se manejan múltiples solicitudes en estos servidores. Entiendo que la primavera es útil para hacer singletons, pero mi entendimiento solo se limita a eso. ¿Alguien puede señalar algún buen recurso que pueda ayudarme a entender cómo se manejan múltiples solicitudes?¿Cómo maneja jetty múltiples solicitudes?

Respuesta

27

Esto puede ser respondido en tantos niveles que lo he estado mirando durante dos días tratando de averiguar cómo responderlo ... así que tomaré un tiro de alto nivel.

Hay este puerto de servidor en el que Jetty escucha y cierto número de subprocesos aceptores cuyo trabajo es conseguir objetos de conexión entre el cliente y el servidor. Una vez que tienes esa conexión, fluye a través de la arquitectura del manejador de embarcaciones haciendo cosas como autenticación quizás, o sacando una identificación de sesión y adjuntando un objeto de sesión a la solicitud. Luego se abre paso en el manejador de servlets y se encuentra el servlet apropiado y usted comienza a manejar el servlet-api. En ese punto, tiene un hilo asignado a su solicitud todo el tiempo que esté en el servlet-api, al menos en el servlet 2.5. En servlet 3.0 tiene disponibles algunos mecanismos asíncronos, o puede usar continuaciones de embarcadero como una forma de obtener soporte asincrónico en servlet 2.5 api.

De todos modos, hay un grupo de subprocesos que el servidor usa para asignar subprocesos a esos conectores que, en última instancia, son los subprocesos que pasan todo el tiempo en el servlet-api. La API de continuación de embarcaciones y la nueva compatibilidad de servlet 3.0 proporcionan mecanismos para volver a lanzar los hilos al grupo de subprocesos primario, de modo que puedan dedicar tiempo a aceptar y procesar otras solicitudes.

Obviamente, hay muchas más cosas que hacer bajo el cubierto relacionado con el uso de las nio api y cómo Jetty gestiona eficientemente todo esto, pero tal vez esto sea suficiente para saciar su pregunta inicial. De lo contrario, no dude en consultar los documentos del muelle (http://www.eclipse.org/jetty/documentation/current) o consulte las listas de correo de embarcadero. Se ha debatido sobre las optimizaciones de jetty-9 en lo que se refiere a las versiones con procesamiento y procesamiento de conexiones http, spdy y websocket en los blogs de Webtide (http://webtide.com/blogs).

+0

A pesar de que realmente aprecio la información que ha proporcionado. Todavía tengo curiosidad por una cosa. Si hay un grupo de subprocesos de solicitud que están esperando ser ejecutados, solo hay un hilo actualmente a través del código de la aplicación web que escribí en la primavera O es posible que pueda tener varias copias de este código y varias solicitudes pueden Ser servido –

+1

servlets no son seguros para los hilos y múltiples hilos pueden caminar a través de los mismos métodos service() o doPost(), el 'estado' se guarda con las variables que entran en el método y el hilo en sí. Si bien puede hacer que los servlets mismos se establezcan y administren cosas con sincronización y lo que normalmente no quiere es que sus servlets tengan un solo hilo, la idea es poder atender varias solicitudes simultáneamente y no puede hacer eso cuando tienen hilos bloqueados en algo tan simple como un servlet. –

Cuestiones relacionadas