Gol*_*den 29 namespaces channel node.js socket.io
我有一个Node.js Web服务器在顶部运行套接字服务器,它是使用Socket.io创建的.基本上,这是有效的.
我现在想要实现的是连接的客户端是成组聚集的.因此,可能有一些客户构成组A和组成组B的其他一些客户.他们应通过寻址特定URL来选择他们所属的组,localhost:3000/A或者localhost:3000/B.
在Socket.io中,我现在想要向组A中的所有客户端或组B中的所有客户端或所有客户端发送消息,而不查看他们的组.
它基本上就像与房间聊天一样,无论他在哪个房间,您都可以为特定房间内的所有客户或任何客户提供消息.
使用Socket.io设计这样一个系统的最佳方法是什么?
到目前为止,我一直在尝试使用命名空间,这基本上可以用于创建组A和B,但是我失去了向所有客户端发送消息的能力,无论他们在哪个房间.至少我不知道该怎么做这个.
我该如何塑造这个?我应该寻找哪些合适的术语?
更新:根据@sdedelbrock的答案,我可以使用命名空间或房间:
io.sockets是一个快捷方式io.of(''),当然它不再与命名空间匹配.简而言之:为什么同一个(?)想法有两个概念?
Sde*_*ock 30
你可能正在使用房间,所以你会做以下事情发射给一个房间里的每个人
io.sockets.in('a').emit('inA', 'foo')
Run Code Online (Sandbox Code Playgroud)
然后发给你可以使用的每个人
io.sockets.emit('everyone','bar');
Run Code Online (Sandbox Code Playgroud)
您也可以使用名称空间:
io.of('/b').emit('inB', 'buzz');
Run Code Online (Sandbox Code Playgroud)
要向除触发您的用户以外的所有人发出以下内容:
io.sockets.broadcast.emit("hello");
Run Code Online (Sandbox Code Playgroud)
[edit]这是一个更详细的答案:
名称间距背后的想法是它与其他名称空间(甚至全局)分开处理.可以把它想象成一个全新的socket.io实例,你可以运行新的握手,新事件,授权等,而不会让不同的命名空间相互干扰.
这对于说/chat和/tracking连接事件具有非常不同的逻辑的位置是有用的
Socket.io为您完成所有工作,就好像它是两个独立的实例,但仍然将信息限制为一个连接,这非常聪明.
可能有一种解决方法,您可以在其中广播所有命名空间(如下所示).但总之,你不应该这样做,你应该使用房间.
for (var nameSpace in io.sockets.manager.namespaces){
io.of(nameSpace).emit("messageToAll", message);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
20962 次 |
| 最近记录: |