2011-11-01 10 views
11

Antes de comenzar a escribir mi aplicación, necesito saber qué hacer cuando una sola instancia de node.js (express y (socket.io o nowjs)) no es suficiente más.Nodo: escala socket.io/nowjs - escala en diferentes instancias

Puede decirme ahora, que no me debería importar la escala hasta que sea hora, pero no quiero desarrollar una aplicación y tener problemas porque no puede escalar fácilmente socket.io o nowjs en múltiples instancias.

Recientemente leí que socket.io ahora admite una forma de escalar usando Redis (que tampoco tengo experiencia en). Nowjs está basado en socket.io - ¿funciona de la misma manera? En nowjs.org puede leer que una "versión distribuida de NowJS" está en desarrollo y va a costar dinero.

Respuesta

14

Si necesita escalar el nodo, lo primero que suele hacer la gente es poner un equilibrador de carga frente a varias instancias de nodos. El estándar para esto hoy es nginx, aunque me gustaría ver el balanceador de nodos 'rebote' que salió recientemente. Aquí está un ejemplo de alguien que use el proxy inverso nginx para gestionar múltiples instancias de nodos:

Node.js + Nginx - What now?

La segunda cosa que usted menciona es socket.io/nowjs. Dependiendo de cómo utilice estos marcos, podría entrar en una situación en la que desee compartir el contexto entre los clientes que están golpeando varias instancias de node.js. Si este es el caso, recomendaría usar una tienda persistente, como redis, para cerrar la brecha entre las instancias de su nodo. He aquí un ejemplo:

How to reuse redis connection in socket.io?

Esperamos que este sea suficiente información y la lectura para empezar, me deja saber si usted tiene alguna pregunta.

Happy coding!

+0

Gracias, ¿sabes si puedes usar nowjs con redis? – Eliasdx

+0

Claro que sí, son dos tecnologías completamente diferentes con diferentes usos. Nowjs le dará las características constantes de conectividad servidor-cliente similares a socket.io. Esto es útil para cosas como mensajería de servidor a cliente, difusión de clientes, etc. El ejemplo clásico es construir una sala de chat. Redis se usa más como un almacén de datos de fondo: puede hacer cosas como pares clave-valor de tienda, pubsub, etc. Vive fuera del nodo como un proceso separado (o incluso en una máquina separada), lo que lo hace ideal para puentes. múltiples servidores –

1

Así como una nota al margen de la discusión de usar nginx de proxy inverso con socket.io, la forma en que yo lo entiendo al menos , nginx 1.0.x, que es una versión estable, no admite el proxy de las conexiones http/1.1 (que es necesario para hacer que socket.io funcione con websockets). hay una solución descrita aquí: http://www.letseehere.com/reverse-proxy-web-sockets para que funcione, o use algo como esto: https://github.com/nodejitsu/node-http-proxy en cambio, los chicos de nodejitsu dicen que esto debería ser compatible.