首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >插座发射到特定房间

插座发射到特定房间
EN

Stack Overflow用户
提问于 2017-09-21 17:03:29
回答 3查看 2.8K关注 0票数 0

我使用的是NodeJS,ExpressJS和Socket.IO,现在是一对一的用户聊天室。我可以简单地将它们都订阅到一个特定的聊天室,并通过Socket.IO更新消息,但我陷入了这样一种情况:我有下面的聊天室。

代码语言:javascript
运行
复制
const rooms = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ];

我只想向房间4, 7, 8, 10广播一个特定的信息,我如何从服务器端做到这一点。

通常,当我必须在一个房间内发送信息时,我会做以下工作

代码语言:javascript
运行
复制
const roomid = 4;
global.io.sockets.in(roomid).emit('new message', {  message: newPost });

但是对于这个用例,我有多个房间,如果它们的套接字连接断开(意味着用户在线),我希望同时向特定的房间发出一条消息。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-09-21 17:14:38

您可以有一个房间的桌子,您想要发送您的信息。在该表中循环并检查房间是否有连接,如果为真,则发送消息。

示例:

代码语言:javascript
运行
复制
const roomsToEmit = ['room1', 'room2', 'room3'];
const message = 'some message';

roomsToEmit.forEach((roomID) => {
    if (io.sockets.adapter.rooms[roomID].length > 0) {
        io.sockets.in(roomID).emit('new message', {  message });
    }
});

如果您想异步地这样做,但我的效率可能不会更高(我认为socket.io处理这个问题,因为您在向WS发出消息时不需要等待任何东西)。

代码语言:javascript
运行
复制
const roomsToEmit = ['room1', 'room2', 'room3'];
const message = 'some message';

Promise.all(roomsToEmit.map((room) => {
    return new Promise((resolve, reject) => {
         if (io.sockets.adapter.rooms[roomID].length > 0) {
              io.sockets.in(roomID).emit('new message', {  message });
         } 
         return resolve(roomID);
    });
})
.then((result) => {
    // all messages emited
    // console.log(result) // array of the rooms where a message was emited
});
票数 1
EN

Stack Overflow用户

发布于 2017-09-21 17:14:28

socket.to('room name').emit('eventname',data)将把数据发送给除发件人以外在场的所有用户,io.to('room name').emit('eventname',data)将把数据发送给包括发件人在内的所有用户。您可以查看https://socket.io/docs/emit-cheatsheet/以获得更多详细信息。你只需要做io.to('1').emit('newMssage',{ message: newPost })

票数 0
EN

Stack Overflow用户

发布于 2021-11-10 11:27:04

您可以使用此示例。

代码语言:javascript
运行
复制
io.to("room1").to("room2").to("room3").emit("some event");

您可以获得有关https://socket.io/docs/v3/rooms/的详细信息。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46349478

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档