2012-05-14 15 views
23

Ho lavorato con le applicazioni di primavera web utilizzando application server pontile/Tomcat per circa due anni a questa parte, ma la cosa che mi sfugge ancora è quanto sono più richieste trattati in questi server. Capisco che la primavera è utile per creare singleton, ma la mia comprensione è solo limitata a ciò. Qualcuno può puntare a qualsiasi buona risorsa che possa aiutarmi a capire come vengono gestite più richieste.Come si comporta molo più richieste

risposta

27

Questo si può rispondere a così tanti livelli Sono stato a fissarla per due giorni cercando di capire come rispondere ... così mi prendo un colpo genere di alto livello a questo.

C'è questo porta del server che ascolta su pontile e un numero di thread accettori il cui compito è quello di ottenere gli oggetti di connessione realizzati tra il lato client e server. Una volta che si dispone di quella connessione, passa attraverso l'architettura del gestore di jetty che fa cose come l'autenticazione, oppure estrae un id di sessione e allegando un oggetto di sessione alla richiesta. Quindi funziona nel gestore del servlet e viene trovato il servlet appropriato e si inizia a gestire il servlet-ap. A quel punto hai un thread assegnato alla tua richiesta per tutto il tempo in cui sei nel servlet-API, almeno sotto servlet 2.5. Nel servlet 3.0 hai a disposizione alcuni meccanismi asincroni, oppure puoi usare jetty-continuations come modo per ottenere il supporto asincrono su servlet 2.5 api.

In ogni caso, esiste un pool di thread che il server utilizza per allocare i thread a quei connettori che in definitiva sono i thread che passano tutto il loro tempo nel servlet-API. L'API di continuazioni di jetty e il supporto di servlet 3.0 più recente forniscono meccanismi per rilasciare i thread al threadpool primario in modo che possano dedicare del tempo ad accettare ed elaborare altre richieste.

Ovviamente c'è ancora molto altro sotto copertura relativa all'uso di nio api e come il molo gestisce in modo efficiente tutte queste cose, ma forse questo è sufficiente per soddisfare la tua domanda iniziale. In caso contrario, sentiti libero di leggere attentamente i documenti del molo (http://www.eclipse.org/jetty/documentation/current) o guarda alle mailing list del molo. C'è stata qualche discussione sul molo-9 ottimizzazioni cui riguarda sotto le coperte con http, SPDY e movimentazione collegamento websocket e trasformazione nei blog a WebTide (http://webtide.com/blogs).

+0

Mentre apprezzo molto l'intuizione che ci avete fornito. Sono ancora curioso di una cosa. Se c'è un pool di thread di richieste che stanno aspettando di essere eseguite, è solo un thread attualmente attraverso il pezzo di codice webapp che ho scritto in primavera O è una possibilità che io possa avere più copie di questo codice e io posso richiedere più essere serviti –

+1

servlet non sono threadsafe e più thread possono essere camminando attraverso lo stesso servizio() o metodi doPost(), lo 'stato' è mantenuto con le variabili che entrano nel metodo ed il filo stesso. Mentre è possibile impostare autonomamente i servlet e gestire le cose con la sincronizzazione e in genere non si desidera che i servlet siano a thread singolo, l'idea è quella di essere in grado di servire più richieste contemporaneamente e non è possibile farlo quando si avere thread che bloccano qualcosa di semplice come un servlet. –

Problemi correlati