【问题标题】:Dynamic rooms in Socket.ioSocket.io 中的动态房间
【发布时间】:2017-05-10 10:11:26
【问题描述】:

我是 node.js 和 socket.io 的新手。我不明白如何处理房间。我正在创建类似于私人消息的东西。每对用户都有自己独特的房间。

来自文档:

io.on('connection', function(socket){
  socket.join('some room');
});

但我需要从客户端创建一个房间。因为它是动态的。怎么样?

我遇到了一些例子https://gist.github.com/crtr0/2896891

server.js

io = socketio.listen(server);

io.sockets.on('connection', function(socket) {
    socket.on('room', function(room) {
        socket.join(room);
    });
});

room = "abc123";
io.sockets.in(room).emit('message', 'what is going on, party people?');

这条线让我发疯。在我看来这很愚蠢。因为服务器永远不知道要使用哪个房间。服务器只能处理多个房间。

room = "abc123";

请帮忙或解释一下。

【问题讨论】:

    标签: node.js socket.io


    【解决方案1】:

    在您上面的代码中,您已经为 abc123 固定了空间,您需要使其对所有连接的客户端都具有动态性。您可以为用户提供房间创建选项,也可以提供从客户端更改/重命名/离开/加入房间的逻辑。基本上在您的客户端和服务器中,您可以应用以下逻辑更改。

    更新或更改房间的客户端逻辑:

    socket.emit('switchRoom', newRoom);
    
    socket.on('updaterooms', function(rooms, current_room) {
      // Update new room logic
    
    }
    

    处理房间变化的服务器逻辑:

    socket.on('switchRoom', function(newroom){
            // leave the current room (stored in session)
            socket.leave(socket.room);
            // join new room, received as function parameter
            socket.join(newroom);
            socket.emit('updatechat', 'SERVER', 'you have connected to '+ newroom);
            // sent message to OLD room
            socket.broadcast.to(socket.room).emit('updatechat', 'SERVER', socket.username+' has left this room');
            // update socket session room title
            socket.room = newroom;
            socket.broadcast.to(newroom).emit('updatechat', 'SERVER', socket.username+' has joined this room');
            socket.emit('updaterooms', rooms, newroom);
        });
    

    参考下面的例子:

    Socket.io Multi-room Example

    Rooms and Namespace in socket.io

    【讨论】:

    • 我上面写的都是示例代码,你可以参考链接了解更多@DarynK。
    • 这个例子我觉得可以理解。感谢您的回答。 @Sumeet
    【解决方案2】:

    好的,我解决了我的问题!如果你在命名空间中使用房间,别忘了写.of('your_namespace')

    【讨论】:

    • 您好,我遇到了同样的问题,您能详细说明如何解决它
    猜你喜欢
    • 1970-01-01
    • 2013-10-18
    • 2011-10-14
    • 2019-05-13
    • 1970-01-01
    • 2019-06-25
    • 2019-03-02
    • 2011-12-02
    相关资源
    最近更新 更多