2011-07-17 21 views
12

¿Cuál es la forma correcta de administrar varias salas de chat con socket.io?¿Cuál es la forma correcta de administrar varias salas de chat con socket.io?

Así en el servidor que sería algo así como:

io.sockets.on('connection', function (socket) { 
    socket.on('message', function (data) { 
    socket.broadcast.emit('receive', data); 
    }); 
}); 

Ahora esto funcionaría bien para una habitación, ya que transmite el mensaje a todos los que están conectados. ¿Cómo se envían mensajes a personas que están en salas de chat específicas?

¿Agregar .of ('/ chat/room_name')? ¿O almacena una selección de todos en una habitación?

Respuesta

18

Socket.IO v0.7 ahora le da una Socket por espacio de nombres se define:

var room1 = io.connect('/room1'); 
room1.on('message', function() { 
    // chat socket messages 
}); 
room1.on('disconnect', function() { 
    // chat disconnect event 
}); 

var room2 = io.connect('/room2'); 
room2.on('message', function() { 
    // chat socket messages 
}); 
room2.on('disconnect', function() { 
    // chat disconnect event 
}); 

Con diferentes tomas, puede enviar selectivamente al espacio de nombres específico que le gustaría.

Socket.IO v0.7 también tiene concepto de "ambiente"

io.sockets.on('connection', function (socket) { 
    socket.join('a room'); 
    socket.broadcast.to('a room').send('im here'); 
    io.sockets.in('some other room').emit('hi'); 
}); 

Fuente: http://socket.io/#announcement

+0

Gracias, creo que el segundo ejemplo es lo que estoy buscando, ya que las salas se crean dinámicamente. Entonces digamos que tengo dos secciones, chat y grupos. ¿Haría io.connect ('/ chat OR/group') y tendré socket.join ('ID DE GRUPO O CHAT') para conectarme a un grupo o chat específico? –

+0

Creo que sí. El primero le permite tener diferentes canales para suscribirse, y el segundo le da un concepto simple de sala que puede agrupar diferentes enchufes. – sntran

2

Actualización: Ambos Now.js y Puente ahora están muertos, ver now.js dead y bridge dead. Socket.io parece haber adoptado la función de devolución de llamada a partir de v0.9, que es un buen paso adelante.

Si bien no está directamente relacionado Socket.io, Now.js (un mayor nivel de abstracción sábana de Socket.io) apoya a los grupos - http://nowjs.com/doc

tienen un ejemplo multi salas de chat en su offocial Repo aquí: https://github.com/Flotype/now/blob/master/examples/multiroomchat_example/multiroomchat_server.js

+0

Ese proyecto podría estar muerto, la página web es 404 y el último compromiso fue hace un año. – jcollum

+0

@jcollum correcta, publicación actualizada. – balupton

Cuestiones relacionadas