使用socket.io管理多个聊天室的正确方法是什么?

时间:2011-07-17 01:44:06

标签: node.js chat socket.io

使用socket.io管理多个聊天室的正确方法是什么?

所以在服务器上会有类似的东西:

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

现在这对一个房间工作正常,因为它向所有连接的人广播消息。您如何向特定聊天室中的人发送消息?

添加.of('/ chat / room_name')? 或者在一个房间里存放一个人的阵列?

2 个答案:

答案 0 :(得分:19)

Socket.IO v0.7现在为您定义了每个命名空间Socket

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
});

使用不同的套接字,您可以选择性地发送到您想要的特定命名空间。

Socket.IO v0.7也有“房间”的概念

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');
});

来源:http://socket.io/#announcement

答案 1 :(得分:2)

更新:Now.js和Bridge现已死亡,请参阅now.js deadbridge dead。从v0.9开始,Socket.io似乎采用了回调功能,这是一个很好的进步。

虽然它不直接与Socket.io相关,但是Now.js(Socket.io上的更高级抽象)支持组 - http://nowjs.com/doc

他们在这里的社交回购中有一个多房间聊天示例:https://github.com/Flotype/now/blob/master/examples/multiroomchat_example/multiroomchat_server.js