群聊消息
创建群组
Socket.IO 房间是一个虚拟概念,允许你将 sockets(连接)分组在一起。处于同一房间的 sockets 可以轻松地彼此通信。当你想要向特定组的客户端广播消息而不是向所有连接的客户端广播时,这个特性非常有用。
变更 app.js:
@@ -30,6 +30,15 @@ io.on("connection", (socket) => {
const { to } = data;
io.to(to).emit("chat", data);
});
+
+ // Create Room
+ socket.on("create-group", (data) => {
+ const { sids: socketIds, name: roomName, id: roomId } = data;
+ socketIds.forEach((socketId) => {
+ io.sockets.sockets.get(socketId)?.join(roomId);
+ });
+ console.log(`Room ${roomId} => ${roomName} created`);
+ });
});
// Start the server
sids
带有待创建群组的所有 socket ID。roomId
是一个唯一的字母数字字符串。相比于用户输入的房间名称,它更适合作为房间的内部标识。
转发群聊消息
@@ -31,12 +31,18 @@ io.on("connection", (socket) => {
io.to(to).emit("chat", data);
});
+ socket.on("group-chat", (data) => {
+ const { room } = data;
+ io.to(room).except(socket.id).emit("group-chat", data);
+ });
+
// Create Room
socket.on("create-group", (data) => {
const { sids: socketIds, name: roomName, id: roomId } = data;
socketIds.forEach((socketId) => {
io.sockets.sockets.get(socketId)?.join(roomId);
});
+ io.to(roomId).emit("create-group", data);
console.log(`Room ${roomId} => ${roomName} created`);
});
});
io.to(...).except(...)
转发消息给所有房间参与者,除了发送者自己。
io.to(roomId).emit("create-group", ...)
通知所有参与者“新群组已经创建”。
Loading...
> 此处输出代码运行结果