2011-11-01 15 views
11

Prima di iniziare a scrivere la mia domanda ho bisogno di sapere cosa fare quando una singola istanza node.js (express e (socket.io o nowjs)) non è abbastanza più.Node: Scale socket.io/nowjs - scala su diverse istanze

Potrebbe dirmi ora che non mi interessa la scala finché non è ora, ma non voglio sviluppare un'applicazione e incorrere in problemi perché non è possibile scalare facilmente socket.io o nowjs tra più le istanze.

Recentemente ho letto che socket.io ora supporta un modo per ridimensionare usando Redis (di cui anch'io non ho esperienza). Nowjs è basato su socket.io - funziona allo stesso modo? Su nowjs.org puoi leggere che una "versione distribuita di NowJS" è in fase di sviluppo e avrà un costo.

risposta

14

Se è necessario scalare il nodo, il primo posto in cui la gente inizia di solito è mettere un servizio di bilanciamento del carico di fronte a più istanze di nodo. Lo standard per questo oggi è nginx, anche se vorrei verificare il bilanciamento del nodo 'rimbalzante' che è uscito di recente. Ecco un esempio di qualcuno che utilizza il proxy inverso nginx per gestire istanze multiple di nodi:

Node.js + Nginx - What now?

La seconda cosa si parla è socket.io/nowjs. A seconda di come stai usando questi framework, potresti entrare in una situazione in cui vuoi condividere il contesto tra i client che stanno colpendo più istanze node.js. Se questo è il caso, raccomanderei l'uso di un archivio persistente, come redis, per colmare il divario tra le istanze del nodo. Ecco un esempio:

How to reuse redis connection in socket.io?

Speriamo che questo sia abbastanza informazioni e la lettura per iniziare, fatemi sapere se avete domande.

Felice codifica!

+0

Grazie, sai se è possibile utilizzare orajs con redis? – Eliasdx

+0

Certo che puoi - sono due tecnologie completamente diverse con usi diversi. Nowjs offrirà le costanti funzionalità di connettività client-server simili a socket.io. Questo è utile per cose come server a client di messaggistica, trasmissione client, ecc. L'esempio classico è la creazione di una chat room. Redis è usato più come un archivio di dati di back-end - può fare cose come memorizzare coppie chiave-valore, pubub, ecc. Vive fuori dal nodo come processo separato (o anche su una macchina separata), il che lo rende ottimo per il bridging più server. –

1

Proprio come una nota a margine sulla discussione di utilizzare nginx per proxy inverso con socket.io, il modo in cui ho capito che almeno , nginx 1.0.x che è una versione stabile non supporta il proxy delle connessioni http/1.1 (che è necessario per far funzionare socket.io con websockets). c'è una soluzione qui descritta: http://www.letseehere.com/reverse-proxy-web-sockets per farlo funzionare, o usare qualcosa come questo: https://github.com/nodejitsu/node-http-proxy invece, i ragazzi di nodejitsu dicono che questo dovrebbe supportarlo.

Problemi correlati