发送到具有 Socket.IO 的房间/频道中的用户子集
Sending to Subset of Users in Room/Channel with Socket.IO
我正在构建一个具有聊天功能的Node(Express(和 Socket.IO Web应用程序。由于在页面上打开新选项卡会建立新的套接字连接,因此我需要根据快速会话 ID 将单个用户的所有实例分组到他们自己的房间中,以使针对该用户的所有消息都显示在所有重复选项卡中。这是对他们可能已经登录的任何其他房间/频道的补充。用户至少订阅两个聊天室:实际的"真实"聊天室,以及使用 sessionID 的他们自己的频道。
问题是我的sessionID的所有套接字也在更一般的房间中(并且需要从其他用户那里获取消息(。当我发送常规聊天消息时,我想省略与发送用户对应的任何套接字,因为他们已经通过自己的渠道收到了消息。我已经继续制作了一个数组哈希,其中包含该会话的套接字 ID 列表,以会话 ID 为键。我已经看到了几种用于指定异常列表的不同语法,但似乎没有一种对我有用。
相关代码,为简洁起见,省略了某些部分:
var sessionSockets = {};
io.sockets.on('connection', function(socket){
if(!io.sockets.manager.rooms["/" + sessionID]) {
sessionSockets[sessionID] = [];
//send message indicating log on to all sockets except for my session
}
socket.join(sessionID); //create private channel for all sockets of the same sessionID
sessionSockets[sessionID].push(socket.id);
socket.on('chat', function(data){
var payload = {
message: data.msg,
from: data.user
};
//send back as personal message to all sockets for this session
io.sockets.in(sessionID).emit('me',payload);
//send to everyone else as regular message; WHAT SYNTAX?
io.sockets.in('').except(sessionSockets[sessionID]).emit('chat', payload);
}
}
tl;dr:如何在不手动比较数组的情况下向频道/房间中的用户子集发送消息?
使用 socket.join('room
'(,然后使用 socket.in(socket.room(.broadcast.emit 向房间发出。
这是在房间中对客户端进行分组并向房间发出特定示例的方法
相关文章:
- 将电视直播频道从网站嵌入我的网站
- 希望日期开始结束于while循环中的一个房间id的一个数组
- 如何知道使用socket.io订阅/取消订阅频道
- 使用javascript后台脚本获取Yotutube频道信息
- 从我的频道中提取最后3个youtube视频
- Socket.io房间不工作/没有意义
- 如何使用App.cable.subscriptions.remove删除Rails5中的actioncable频道订阅
- 如何在Pusher中创建用户特定频道
- Strophe.js MUC:创建一个房间并连接多个房间
- Socket.io-知道插座在哪个房间
- 什么'It’这是我能容纳的最大房间数
- 频道谷歌应用程序引擎频道.open()不工作
- 为什么我的消息没有用这个处理程序发送到Socket.io房间
- 在xmpp多聊天中,管理员角色只授予创建房间的在线用户成员资格
- 如何使用 ThreeJS 创建一个房间
- 如何在 socket.io 连接房间
- Youtube API - 检索频道中的所有标签
- Socket.io - 离开房间时延迟
- Youtube播放器iframe嵌入不适用于我的频道
- 发送到具有 Socket.IO 的房间/频道中的用户子集