Esto es lo que tienen en común los espacios de nombres y las salas (socket.io v0.9.8; tenga en cuenta que la v1.0 implica una reescritura completa, por lo que las cosas podrían haber cambiado):
Múltiples espacios de nombres y múltiples salas comparten la misma conexión (WebSocket)
El servidor transmitirá mensajes por cable solo a aquellos clientes que se conectaron / se unieron a un nsp / room, es decir, no se trata solo del filtrado del lado del cliente
Las diferencias :
el cliente conecta los espacios de nombres utilizando io.connect(urlAndNsp)(el cliente se agregará a ese espacio de nombres solo si ya existe en el servidor)
las salas se pueden unir solo en el lado del servidor (aunque crear una API en el lado del servidor para permitir que los clientes se unan es sencillo)
la autorización no está disponible con salas , pero se podría agregar una autorización personalizada a la API mencionada y fácil de crear en el servidor, en caso de que uno esté decidido a usar salas
las habitaciones son parte de un espacio de nombres (por defecto al espacio de nombres 'global')
los espacios de nombres siempre tienen sus raíces en el ámbito global
Para no confundir el concepto con el nombre (habitación o espacio de nombres), usaré el compartimento para referirme al concepto, y los otros dos nombres para las implementaciones del concepto. Así que si usted
necesita autorización por compartimento , los espacios de nombres pueden ser la ruta más fácil de tomar
si tu quieres compartimentos jerárquicamente en capas (2 capas como máximo), use un combo de espacio de nombres / sala
si su aplicación del lado del cliente consta de diferentes partes que (no se preocupan por los compartimentos, pero) necesitan separarse entre sí, use espacios de nombres.
Un ejemplo para este último sería una gran aplicación cliente donde diferentes módulos, quizás desarrollados por separado (por ejemplo, de terceros), cada uno usando socket.io de forma independiente, se están utilizando en la misma aplicación y desean compartir una conexión de red única.
Al no haber evaluado 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 a su pregunta, pero la investigación que condujo a esta respuesta al menos me ayudó a ver más claramente.
¿Podemos decir que el espacio de nombres es un área determinada de mi aplicación web y un grupo de clientes en esa área?
Onaiggac
¿Puede agregar algo al desconectarse de una sala / espacio de nombres? Qué les sucede cuando el cliente desconecta o pierde la conexión temporalmente. Aquí está escrito: Al desconectarse, los enchufes dejan todos los canales de los que formaron parte automáticamente, y no es necesario un desmontaje especial de su parte. ¿Es un canal igual a su compartimento ?
marchita el
67
Es una pregunta antigua, 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 enlace ): aunque es teóricamente 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 habitaciones.
¡Gusta! Espacios de nombres: conexiones predefinidas. Habitaciones - Conexiones dinámicas
Nandakumar
16
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.
Las habitaciones y los espacios de nombres segmentan la comunicación y agrupan tomas individuales.
Una transmisión a una sala o un espacio de nombres no llegará a todos, solo a los miembros.
La diferencia entre espacios de nombres y habitaciones es la siguiente:
Espacios de nombres: se gestionan en la interfaz, lo que significa que el usuario, o un atacante, se une a través de la interfaz y aquí se gestiona la unión y desconexión.
Salas: se gestionan en el back-end, lo que significa que el servidor asigna salas de unión y salida.
La diferencia es principalmente quién los maneja
Para decidir qué usar, debe decidir si la segmentación se debe administrar en el frontend o en el backend
Los espacios de nombres le permiten crear objetos con el mismo nombre, pero estarían separados ya que vivirán en espacios de nombres diferentes, también conocidos como ámbitos.
Este es el mismo proceso de pensamiento que debería tener con los espacios de nombres Socket.IO. Si está creando una aplicación web modular Node, deseará espaciar los nombres de los diferentes módulos. Si vuelve a mirar nuestro código de espacio de nombres, verá que pudimos escuchar los mismos eventos exactos en diferentes espacios de nombres. En Socket.IO, el evento de conexión en la conexión predeterminada y el evento de conexión en un espacio de nombres / xxx son diferentes. Por ejemplo, si tenía un sistema de chat y comentarios en su sitio y deseaba que ambos fueran en tiempo real, podría asignar un espacio de nombres a cada uno. Esto le permite crear una aplicación Socket.IO completa que solo vive en su propio contexto.
Esto también sería cierto si estuviera construyendo algo para ser empaquetado e instalado. No puede saber si alguien ya está usando ciertos eventos en el espacio de nombres predeterminado, por lo que debe crear los suyos y escucharlos allí. Esto le permite no pisotear a ningún desarrollador que use su paquete.
Los espacios de nombres nos permiten dividir las conexiones en diferentes contextos. Podemos comparar esto con las salas, lo que nos permite agrupar las conexiones. También podemos hacer que la misma conexión se una a otras salas también.
Los espacios de nombres le permiten crear diferentes contextos para que Socket.IO funcione. Las habitaciones le permiten agrupar conexiones de clientes dentro de esos contextos.
Es una pregunta antigua, 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 enlace ): aunque es teóricamente 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 habitaciones.
fuente
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:
fuente
Las habitaciones y los espacios de nombres segmentan la comunicación y agrupan tomas individuales.
Una transmisión a una sala o un espacio de nombres no llegará a todos, solo a los miembros.
La diferencia entre espacios de nombres y habitaciones es la siguiente:
La diferencia es principalmente quién los maneja
Para decidir qué usar, debe decidir si la segmentación se debe administrar en el frontend o en el backend
fuente
Los espacios de nombres le permiten crear objetos con el mismo nombre, pero estarían separados ya que vivirán en espacios de nombres diferentes, también conocidos como ámbitos.
Este es el mismo proceso de pensamiento que debería tener con los espacios de nombres Socket.IO. Si está creando una aplicación web modular Node, deseará espaciar los nombres de los diferentes módulos. Si vuelve a mirar nuestro código de espacio de nombres, verá que pudimos escuchar los mismos eventos exactos en diferentes espacios de nombres. En Socket.IO, el evento de conexión en la conexión predeterminada y el evento de conexión en un espacio de nombres / xxx son diferentes. Por ejemplo, si tenía un sistema de chat y comentarios en su sitio y deseaba que ambos fueran en tiempo real, podría asignar un espacio de nombres a cada uno. Esto le permite crear una aplicación Socket.IO completa que solo vive en su propio contexto.
Esto también sería cierto si estuviera construyendo algo para ser empaquetado e instalado. No puede saber si alguien ya está usando ciertos eventos en el espacio de nombres predeterminado, por lo que debe crear los suyos y escucharlos allí. Esto le permite no pisotear a ningún desarrollador que use su paquete.
Los espacios de nombres nos permiten dividir las conexiones en diferentes contextos. Podemos comparar esto con las salas, lo que nos permite agrupar las conexiones. También podemos hacer que la misma conexión se una a otras salas también.
Los espacios de nombres le permiten crear diferentes contextos para que Socket.IO funcione. Las habitaciones le permiten agrupar conexiones de clientes dentro de esos contextos.
fuente