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
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).
- 1. Il molo ha una cache di richieste?
- 2. Come si ferma il molo
- 3. Task.Delay() che non si comporta come previsto
- 4. Fare un'immagine si comporta come un pulsante
- 5. L'estensione multilinea si comporta come un blocco?
- 6. Come si comporta Verilog con numeri negativi?
- 7. Textview si comporta come un terminale
- 8. L'oggetto si comporta come un array? (PHP)
- 9. Come si comporta esattamente il typedef 'reference'?
- 10. Come si comporta Smalltalk con monkeypatching?
- 11. Perché TFormatSettings non si comporta come previsto?
- 12. Come si usa cURL per eseguire più richieste simultanee?
- 13. Perché capistrano si comporta così?
- 14. BASH: [] (test) si comporta unconformly
- 15. Perché InstanceContextMode.PerSession si comporta come PerCall quando si utilizza wsHttpBinding?
- 16. Cosa si comporta peggio: riflessione o boxe?
- 17. Regex si comporta pigro, dovrebbe essere avidi
- 18. Perché console.log si comporta in questo modo?
- 19. img si comporta come un img di sfondo?
- 20. ODP .NET si comporta in modo strano
- 21. Aggiungere più di una directory di risorse al molo
- 22. new String() non si comporta come un array come oggetto
- 23. Perché un modulo Python si comporta come un singleton?
- 24. Perché un PriorityQueue non si comporta come una coda?
- 25. matplotlib axes.set_aspect ('uguale') non si comporta come previsto
- 26. Ordine di distribuzione del molo
- 27. SimpleDateFormat si comporta in modo incoerente
- 28. L'eliminazione di un ViewController più in basso nello stack non si comporta come previsto
- 29. Ricerca di un ambito Ninject che si comporta come InRequestScope
- 30. Impossibile eseguire molo start.jar
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 –
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. –