2016-12-25 83 views
3

我是node.js和socket.io中的新成员。我不明白如何与房间合作。我正在创建一个私人消息。每对用户都有其独特的空间。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"; 

请帮忙或解释。

回答

4

在上述代码中,您已将空间固定为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

+0

对不起,我不明白这个例子。这种风格“swtichRoom”,“updatechat”,“服务器”很烦人。写入一种风格 - lowerCamelCase。 –

+0

我上面写的是示例代码,你可以参考链接了解更多@DarynK。 – Sumeet

0

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

+0

你好我有同样的问题,你可以解释更多如何解决它 – radtelbi

相关问题