【问题标题】:What is the proper way to manage multiple chat rooms with socket.io?使用 socket.io 管理多个聊天室的正确方法是什么?
【发布时间】:2011-10-06 23:26:39
【问题描述】:

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

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

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

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

添加 .of('/chat/room_name')? 或者在一个房间里存储一个数组?

【问题讨论】:

    标签: node.js chat socket.io


    【解决方案1】:

    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

    【讨论】:

    • 谢谢,我认为第二个示例是我正在寻找的,因为房间是动态创建的。所以可以说我有两个部分,聊天和群组。我会做 io.connect('/chat OR /group') 并让 socket.join('GROUP OR CHAT ID') 连接到特定的群组或聊天吗?
    • 我相信是的。第一个允许您订阅不同的频道,第二个为您提供一个简单的房间概念,您可以将不同的套接字分组。
    【解决方案2】:

    更新:Now.js 和 Bridge 现在都死了,请参阅 now.js deadbridge dead。 Socket.io 似乎从 v0.9 开始采用了回调功能,这是向前迈出的一大步。

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

    他们在官方仓库中有一个多房间聊天示例:https://github.com/Flotype/now/blob/master/examples/multiroomchat_example/multiroomchat_server.js

    【讨论】:

    • 那个项目可能已经死了,网页是 404,最后一次提交是一年前。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-29
    • 1970-01-01
    • 2017-06-20
    • 2012-06-25
    • 2013-04-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多