如何让用户加入他们的多个房间 socket.io
Posted
技术标签:
【中文标题】如何让用户加入他们的多个房间 socket.io【英文标题】:How to keep user joined to their multiple rooms socket.io 【发布时间】:2021-10-28 14:24:28 【问题描述】:我对 socket.io 完全陌生,而且我已经被这个问题困扰了很多天。我也找不到有关此主题的任何深度 youtube 视频。我想做的是,我正在创建一个聊天应用程序。登录后,您将看到所有组,您可以加入这些组。假设用户加入了 3 个组。一旦该用户登录,我想将该用户加入这三个组,以便他在有消息时收到消息。怎么能这样?? 这是我到目前为止所做的,
前端
消息发送时
socket.emit("message", name, message, room: selectedGroup.name );
socket.emit("join-group", name, room: group.name );
socket.on("message", ( name, message, room ) =>
const update = ...group ;
update.messages.push( sender: name, message );
setSelectedGroup(update);
);
后端
io.on("connection", (socket) =>
socket.on("join-group", ( name, room ) =>
socket.join(room);
);
socket.on("message", ( name, message, room ) =>
socket.join(room);
io.to(room).emit("message", name, message, room );
);
);
【问题讨论】:
【参考方案1】:我的主要语言不是英语,所以对此我深表歉意
ioobject中有一个适配器可以访问里面所有活动的房间,如果你想在用户登录的时候访问所有的房间,你必须在 onConnection 中使用这些命令
但是,版本 2、3、4 在这方面有所不同。
https://socket.io/docs/v4/adapter/
从右上角你可以找到你想要的版本
const socketio = require("socket.io");
const server = http.createServer(app);
const io = socketio(server);
const activeRooms(io)=>
const arr = Array.from(io.sockets.adapter.rooms);
// [['room1', Set(2)], ['room2', Set(2)]]
const filtered = arr.filter(room => !room[1].has(room[0]))
// ['room1', 'room2']
const res = filtered.map(i => i[0]);
return res;
const rooms = activeRooms()
if (rooms)
rooms.forEach((element) =>
socket.join(element.toString());
);
socket.join(socket.username);
【讨论】:
以上是关于如何让用户加入他们的多个房间 socket.io的主要内容,如果未能解决你的问题,请参考以下文章