2016-02-26 23 views
5

Presto userò un server chiamato Undertow. Il website dice:Se un server Web non è bloccante, significa che sta gestendo IO allo stesso modo di node.js?

Undertow è un server performante web flessibile scritto in Java, fornendo sia il blocco e non-blocking API basata su NIO

Se Undertow permette non bloccante, è che lo stesso come node.js? Non intendo le lingue o qualcosa del genere. Ho un progetto separato in cui pensavo che node.js sarebbe stata una buona scelta, ma se potessi utilizzare un singolo prodotto per più progetti sarebbe utile.

EDIT: Ho trovato questa domanda. Java NIO non-blocking mode vs node.js asychronous operation E sto iniziando a pensare di aver confuso le cose.

+0

Possibile duplicato di [modalità NIO non bloccante di Java vs node.js operazione asincrona] (http://stackoverflow.com/questions/20740961/java-nio-non-blocking-mode-vs-node-js-asychronous -operation) – EJP

risposta

1

Undertow si basa sulla libreria JBoss XNIO e come Nodejs, XNIO si basa sulle capacità del sistema operativo (epoll o kqueue ove disponibili) di notifica per gli eventi IO (quando è disponibile i dati di leggere da un socket per esempio).

In Undertow, l'accettazione delle richieste in arrivo viene eseguita seguendo questo modello, dal IO threads. Fare operazioni di blocco su questi thread significherebbe ritardare la gestione delle nuove richieste in arrivo. See Undertow's documentation on IO threads

Accanto alle discussioni IO, Undertow gestisce un altro pool di thread, il Worker threads, per gestire le attività di blocco (si pensi di compiti come chiamare un webservices o interrogazione di un database.) E questo è quello che si voleva ottenere con Nodejs!

Per utilizzare un thread Worker, la gestione della richiesta deve essere inviata dal thread I/O. L'API è completa e facile da usare, ancora, see Undertow's documentation, come punto di partenza.

+0

Intendi usare Undertow di Node.js Potrei elaborare molte più richieste? Che ne pensi dell'utilizzo della memoria? –

+0

No, non è quello che intendo. È praticamente impossibile rispondere a questa domanda, non ha nemmeno senso. Tutto dipende da cosa fai in queste richieste.Quello che sto dicendo è che con Undertow puoi usare normali thread java - i thread worker (che si associano ai thread del kernel) per fare attività di blocco (chiamate DB, gestione file ...), e questo non puoi farlo in Nodejs. Con Nodejs non si ha questa preoccupazione di bloccare le attività (se si sa cosa si sta facendo), poiché la maggior parte delle librerie utilizzate si aspetta che venga richiamato un callback al termine dell'attività. – aramaki

0

Da Wikipedia:

In informatica, I/O asincrono, o non-blocking I/O è una forma di elaborazione di ingresso/uscita che consente altre elaborazioni di continuare prima che la trasmissione è terminata.

Non bloccanti e asincroni sono sinonimi, ed è così che funzionano tutti i server web standard.js.

+0

Quindi pensi che sia solo una scelta tra gli ambienti? – johnny

+0

Niente affatto. Ciò significa semplicemente che i diversi server Web utilizzano la stessa tecnologia per gestire l'IO. Ci sono ancora molte differenze in termini di funzionalità e prestazioni. Non ho abbastanza esperienza con i diversi server per poter consigliare nessuna delle opzioni qui. – bolav

+0

Wikipedia di nuovo sbagliato. Asincroni e non bloccanti sono due modelli diversi, non sinonimi l'uno dell'altro. In modalità non bloccante, il trasferimento è completo o non si verifica quando ritorna la chiamata I/O. – EJP