socket.io仅向位于房间A和B的用户广播

Fir*_*Dib 12 javascript sockets node.js socket.io

是否可以对位于A房间和B房间的名称空间的所有用户进行socket.io广播,而不是那些只在A房间或B房间的用户?

如果没有,我将如何自己实施?有没有办法检索位于给定房间的命名空间中的所有用户?

我在节点中使用socket.io 1.0

编辑:如果没有本机方法,我将如何创建自己的语法,如: socket.broadcast.in('room1').in('room2').emit(...)

Arc*_*eja 5

您可以使用(参考如何为房间中的所有客户端更新套接字对象来查找房间的所有用户?(socket.io))

var clients = io.sockets.adapter.room["Room Name"]
Run Code Online (Sandbox Code Playgroud)

因此,给你的2个房间的名单列表两个数组,你可以使用像这里的答案计算交集(参考:javascript中数组交集的最简单代码)

最后,您可以使用两个房间中的用户列表并使用(ref:如何更新房间中所有客户端的套接字对象?)来发布事件?(socket.io))

//this is the socket of each client in the room.
var clientSocket = io.sockets.connected[clientId];

//you can do whatever you need with this
clientSocket.emit('new event', "Updates");
Run Code Online (Sandbox Code Playgroud)

交替的方法是拥有隐藏的房间,在那里你保持所有房间的组合,并在幕后添加用户到这些房间,然后你只需简单地发射到那些隐藏的房间.但这会带来指数增长问题.