我是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";
请,帮助或解释。
答案 0 :(得分:6)
在您上面的代码中,您已经修复了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);
});
参考下面的例子:
答案 1 :(得分:0)
好的,我解决了我的问题!如果您在名称空间内使用房间,请不要忘记写.of('your_namespace')