2011-05-05 23 views
19

Tengo un Node.js con la aplicación de chat Socket.io y un sistema de chat XMPP Openfire. Tengo muchas ganas de reemplazar XMPP con Node.js y Socket.io. Sin embargo, se habla de que, Node.js con Socket.io tendría un problema, si el servidor se bloquea y vuelve a conectarse podría tener un síndrome de cuello de botella o quizás sea imposible reconectar a 10.000 de sus usuarios en línea. ¿Es eso cierto?Node.js con módulo Socket.io vs XMPP: ventajas y desventajas

Otra pregunta. ¿En qué caso XMPP sería más apropiado que Socket.io y viceversa?

Respuesta

13

XMPP is an open-standard communications protocol for message-oriented middleware (Wikipedia).

Node.js es una herramienta de desarrollador basada en JavaScript para crear servicios de red.

Esas dos cosas realmente no se pueden comparar. Si ha creado una aplicación de chat con socket.io, es posible que sufra de síndrome de cuello de botella, pero depende en gran medida del código de la aplicación.

En general, si quieres ir más allá del simple chat basado en navegador, consideraría seriamente XMPP (también conocido como Jabber), ya que hay clientes XMPP disponibles para todos los OS'es.

+0

Hola Mikl gracias por la entrada. ¿Qué te hace pensar que nodejs es posible sufrir de síndrome de cuello de botella? – user739217

+0

No creo que Node.js en sí mismo tenga cuellos de botella inherentes, pero si construyes un servidor de chat encima de Node.js (el nodo en sí mismo es solo un conjunto de herramientas para construir servicios de red), tendría que diseñarse con mucho cuidado para ser capaz de manejar a 10,000 usuarios reconectándose a la vez. El principal problema será obtener todos los datos necesarios para validar a los usuarios y enviarles los mensajes de chat que hayan perdido. Esas son varias consultas de bases de datos multiplicadas por 10.000.Pocos sistemas pueden manejar eso en unos pocos segundos. – mikl

+0

La escalabilidad es un problema con node.js cuando se construye un framework xmmp encima – hanu

11

Creo que los pros de Node.js son que está escrito en un lenguaje común (Javascript) en lugar de servidores XMPP, que los comunes están escritos en erlang/Java que no se conocen tan ampliamente.

Si desea tener control total sobre el comportamiento del servidor y escribir módulos inteligentes, entonces sospecho que ese nodo será la mejor solución para usted.

El lugar donde Node.js podría caerse es que si alguna vez necesita escalar más allá de un servidor, tendrá que diseñarlo en la aplicación de su nodo. Creo que eJabberd y Openfire son compatibles con la agrupación de la caja, por lo que todo lo que tendría que hacer es traer otro servidor en línea, configurar los dos para hablar entre sí y listo.

Mi consejo general es que si el sistema XMPP actual funciona bien para usted, entonces me limitaría a ello.

+0

Gracias por la entrada James. Entonces, si nodejs está alojado en un servidor en la nube, eso eliminaría su desventaja sobre Openfire o el soporte de clustering de eJabberd. Nuestro servidor Openfire XMPP tiene problemas de pérdida de memoria, solo para que lo sepa. – user739217

+0

pero aún tiene que escribir y mantener la solución node.js –

+0

Socket.io ahora admite clustering http://socket.io/#announcement, alternativamente use http://pubsub.io, un concentrador de mensajes agrupado independiente escrito en nodejs – ianj

3

Como dijo mikl, XMPP es un protocolo y no un marco de aplicación.

Puede construir aplicaciones XMPP encima de NodeJS de la misma manera que puede compilar aplicaciones SocketIO sobre NodeJS. La diferencia es que OpenFire y ejabberd han existido y probado durante algún tiempo frente a alguna solución que usted construiría por su cuenta. Eso no significa que deba hacerlo, pero sí significa que debe tener un buen caso de negocios para hacerlo.

Si configura su infraestructura correctamente, puede hacerlo en prácticamente cualquier marco. Para mitigar su latencia durante los picos, debe equilibrar la carga de sus solicitudes, lo que también se requerirá con cualquier sistema.