Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Socket.io中的动态房间_Node.js_Socket.io - Fatal编程技术网

Node.js Socket.io中的动态房间

Node.js Socket.io中的动态房间,node.js,socket.io,Node.js,Socket.io,我是node.js和socket.io的新手。我不知道如何处理房间。我正在创建一些类似于私人消息的东西。每对用户都有自己独特的房间 从文件: io.on('connection', function(socket){ socket.join('some room'); }); 但我需要从客户端创建一个房间。因为它是动态的。怎么做 我遇到了一些例子 server.js io = socketio.listen(server); io.sockets.on('connection', fun

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

从文件:

io.on('connection', function(socket){
  socket.join('some room');
});
但我需要从客户端创建一个房间。因为它是动态的。怎么做

我遇到了一些例子

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";

请提供帮助或解释。

在您上面的代码中,您有固定的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);
    });
请参阅以下示例:


好的,我解决了我的问题!如果您使用名称空间中的文件室,请不要忘记编写('your_namespace')的

我上面写的都是示例代码,您可以参考链接了解更多@DarynK。我认为这个示例是可以理解的。谢谢你的回答@Sumeethi我也有同样的问题,你能解释一下如何解决吗