gpt4 book ai didi

node.js - Socket.io 中的动态房间

转载 作者:搜寻专家 更新时间:2023-10-31 22:39:37 25 4
gpt4 key购买 nike

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

来自文档:

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

请帮助或解释。

最佳答案

在你上面的代码中,你有固定的空间给 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

关于node.js - Socket.io 中的动态房间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41322878/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com