socket.io ¿habitaciones o espacios de nombres?


Estoy investigando nodejs/socket.io para chat en tiempo real, y necesito algunos consejos para implementar salas.

¿Qué es mejor, usar el espacio de nombres o usar la función room para aislar completamente grops de chatters entre sí?

¿Cuál es la verdadera diferencia técnica entre las habitaciones y el espacio de nombres?

¿Hay alguna diferencia en el uso de recursos?

Author: T J, 2012-06-07

3 answers

Esto es lo que los espacios de nombres y las habitaciones tienen en común (socket.io v0. 9 . 8-tenga en cuenta que v1. 0 implicó una reescritura completa, por lo que las cosas podrían haber cambiado):

  • Ambos espacios de nombres (io.of ('/nsp') ) y rooms (socket.join ('habitación')) se crean en el lado del servidor
  • Varios espacios de nombres y varias salas comparten la misma conexión (WebSocket)
  • El servidor transmitirá mensajes a través del cable solo a aquellos clientes que se conectaron a / se unieron a un nsp / room, es decir, no es solo filtrado del lado del cliente

Las diferencias :

  • los espacios de nombres están conectados por el cliente usando io.connect(urlAndNsp) (el cliente se agregará a ese espacio de nombres solo si ya existe en el servidor)
  • las salas solo se pueden unir en el lado del servidor (aunque crear una API en el lado del servidor para permitir que los clientes se unan es sencillo)
  • los espacios de nombres pueden ser autorización protegida
  • la autorización no está disponible con rooms , pero se podría agregar una autorización personalizada a la API antes mencionada, fácil de crear en el servidor, en caso de que uno esté empeñado en usar rooms
  • las habitaciones son parte de un espacio de nombres (por defecto al espacio de nombres 'global')
  • los espacios de nombres son siempre arraigada en el ámbito global

Para no confundir el concepto con el nombre (sala o espacio de nombres), usaré compartimiento para referirse al concepto, y los otros dos nombres para las implementaciones del concepto. Así que si

  • necesita autorización por compartimiento , los espacios de nombres podrían ser la ruta más fácil de tomar
  • si desea compartimentos jerárquicamente en capas (2 capas como máximo), use un combo espacio de nombres/habitación
  • si su aplicación del lado del cliente consta de diferentes partes que (no se preocupan por los compartimentos, pero) deben separarse entre sí, utilice espacios de nombres.

Un ejemplo para este último sería una gran aplicación cliente donde diferentes módulos, tal vez desarrollados por separado (por ejemplo, de terceros), cada uno usando socket.io independientemente, se están utilizando en la misma aplicación y quieren compartir una sola conexión de red.

No habiendo hecho referencia a esto, me parece que si solo necesita compartimentos simples en su proyecto para separar y agrupar mensajes, cualquiera de los dos está bien.

No estoy seguro de si eso responde su pregunta, pero la investigación que condujo a esta respuesta al menos me ayudó a ver más claro.

 181
Author: Eugene Beresovsky,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-08-20 01:49:26

Es una vieja pregunta, pero después de investigar un poco sobre el tema, encuentro que la respuesta aceptada no está clara en un punto importante. Según el propio Guillermo Rauch ( ver link): aunque teóricamente es posible crear espacios de nombres dinámicamente en una aplicación en ejecución, los usa principalmente como secciones separadas predefinidas de su aplicación. Si, por otro lado, necesita crear compartimentos ad hoc, sobre la marcha, para acomodar grupos de usuarios / conexiones, lo mejor es usar habitación.

 45
Author: Julio Garcia,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-06-24 13:40:21

Depende de lo que quieras hacer.

La principal diferencia es que las habitaciones son más difíciles de implementar. Debe crear un método para unirse a las salas con cada recarga de página.

Con espacios de nombres solo necesita escribir var example = io.connect('http://localhost/example'); en su cliente javascript y el cliente se agrega automáticamente en los espacios de nombres.

Ejemplo de utilización:

  • salas: chat privado.
  • espacios de nombres: el chat de la página.
 10
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-06-07 22:15:17