2009-07-16 21 views
7

Seguito su this question In realtà sono in fase di ricerca del contenitore HTTP giusto per uno dei miei progetti. Ho esaminato diversi contenitori, ma non sono ancora sicuro quale sarà il più adatto per richieste AJAX a carico elevato. Apache Mina sembra abbastanza promettente, ma relativamente complesso. L'implementazione asincrona del server Web chiamata AsyncWeb sembra essere stata unita a Mina, ma non sono riuscita a trovare alcun riferimento alla produzione. Nell'altra domanda ho consigliato il server Simple HTTP che mi piace molto perché è ... molto semplice, chiaro e pulito ma non so ancora se sarebbe adatto allo scopo.Fast NIO, server HTTP asincrono per Java

Inoltre non sono sicuro in cui la domanda di movimentazione concetto di scegliere:

  1. creare un thread dispatcher per ogni connessione in entrata (ottimizzazioni potrebbero ovviamente includere un pool di thread e una coda di invio), vale a dire facendo tutto il lavoro Probabilmente il vantaggio è che non devo affrontare molti problemi di sincronizzazione, ma probabilmente ridurrò drasticamente il throughput su carichi elevati.

  2. Poiché si tratta di un'applicazione altamente modulare, un approccio "pipelining" (potrebbe esserci un termine più appropriato, credo) potrebbe anche funzionare: creare un numero fisso di thread, ciascuno per un determinato compito. E.g. uno per la gestione delle richieste -> uno per la deserializzazione dell'intestazione (se ottengo input in diversi formati come HTML Forms, XML-RPC, JSON ecc.) -> uno per "Controller Dispatching" (facendo tutto ciò che voglio fare con questi dati) -> e uno per serializzare l'output nel formato desiderato (JSON, XML, HTML ecc.) e spostare ogni richiesta attraverso questi livelli fino al completamento. Probabilmente più difficile da realizzare, ma ho un numero fisso di thread (il numero può dipendere anche dall'hardware) e una netta separazione delle preoccupazioni.

Eventuali esperienze con qualsiasi Framework che potrebbe andare bene e i due diversi approcci di gestione?

+0

un'occhiata a deftserver.org (progetto giovane e al momento non pronti per la produzione, disclaimer: im a committer abile) – Schildmeijer

risposta

3

C'è un esempio sul repository di subversion Simple HTTP.

http://simpleweb.svn.sourceforge.net/viewvc/simpleweb/trunk/src/demo/java/org/simpleframework/example/javafx/

Dimostra dati di mercato in tempo reale utilizzando la cometa e un solo filo di dispacciamento aggiornamenti a qualsiasi numero di clienti. Semplice ha un livello di trasporto trasparente che fornisce la semantica I/O di blocco con il vantaggio di una distribuzione asincrona con NIO basata su code ByteBuffer fisse per ogni client connesso. In questo modo ottieni un'uscita NIO trasparente e trasparente con un consumo di memoria prevedibile.Anche le misurazioni delle prestazioni contro server come Jetty mostrano un miglioramento delle prestazioni x2.

http://simpleweb.svn.sourceforge.net/viewvc/simpleweb/trunk/application/Plotter/ApacheBench/ScalabilityApacheBench.png?revision=1448

+0

Grazie per il link. Lo darò un'occhiata. A causa della mia esperienza positiva con il Framework, tenderei a usarlo dopo tutto. – Daff

7

Si consiglia di guardare Jetty, e, in particolare, Hightide

Hightide è preconfigurato con state-of-the-art di comunicazione Ajax librerie quali DWR, ActiveMQ-Web (JMS al browser) e il protocollo Bayeux (noto anche come cometd). distribuzione delle applicazioni su Hightide significa che scalerà senza intoppi grazie ad una combinazione di strato IO intelligente del Molo e continuazioni meccanismo

In particolare, un sacco di lavoro è stato messo in per ottimizzare Jetty per AJAX. Vedere this blog entry per ulteriori dettagli

+0

Grazie, che suona bene, anche. Metterò anche Jetty nella mia lista di valutazione. – Daff

+0

È interessante notare che qualcuno è in disaccordo con te e ha downvoted per qualche motivo. Perché, non lo so ... –