Socket.io的动态客房

Dar*_* K. 5 node.js socket.io

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

来自文档:

io.on('connection', function(socket){
  socket.join('some room');
});
Run Code Online (Sandbox Code Playgroud)

但我需要从客户端创建一个房间.因为它很有活力.怎么样?

我遇到了一些例子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?');
Run Code Online (Sandbox Code Playgroud)

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

room = "abc123";
Run Code Online (Sandbox Code Playgroud)

请帮助或解释.

Sum*_*eet 9

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

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

socket.emit('switchRoom', newRoom);

socket.on('updaterooms', function(rooms, current_room) {
  // Update new room logic

}
Run Code Online (Sandbox Code Playgroud)

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

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);
    });
Run Code Online (Sandbox Code Playgroud)

参考下面的例子:

Socket.io多房间示例

socket.io中的房间和命名空间

  • 这个例子我想是可以理解的。感谢您的回答。@苏米特 (3认同)