Nodejs如何将消息广播到带有房间的命名空间

Posted

技术标签:

【中文标题】Nodejs如何将消息广播到带有房间的命名空间【英文标题】:Nodjs How to broadcast message to namespace with room 【发布时间】:2013-12-24 20:21:52 【问题描述】:

我可以使用以下代码将消息发送到特定的命名空间空间

io.of(namespace).in(room).emit('functionname', data);

但它发送给所有连接的客户端,包括发送者,我想要的是我想发送不包括发送者的消息,我尝试了以下方法,但由于语法不正确,一切都失败了

io.broadcast.of(namespace).in(room).emit('functionname', data);

io.of(namespace).broadcast.in(room).emit('functionname', data);

io.of(namespace).in(room).broadcast.emit('functionname', data);

io.of(namespace).in(room).broadcast('functionname', data);

如何将消息发送给除发件人以外的所有客户端。

【问题讨论】:

【参考方案1】:

我相信你想要的是这样的:

 // send to all clients except sender
 socket.broadcast.emit('event', "this is a test");

 // send to all clients in 'room' room except sender
 socket.broadcast.to('room').emit('event', 'whadup');

  // sending to all clients in 'room' room, include sender
 io.sockets.in('room').emit('event', 'woodup');

如果您还想指定命名空间,可以添加“of.(namespace)”。

【讨论】:

不,我不期待这个,最后一行你说“如果你也想指定命名空间,你可以添加“of.(namespace)”。在哪里添加命名空间和broadcast(将消息发送给除了具有命名空间和房间概念的发件人之外的所有用户)不是emit 你说的真的没有道理......这是将消息广播到某个名称空间中某个房间中的所有内容的正确方法。如果您仍然感到困惑,请查看:link 或此link。 你究竟是如何使用 "of.(namespace)" 的?有没有类似 io.of('namespace').broadcast.to('room').emit() 的东西?【参考方案2】:

这样做可以向除发件人以外的所有人发送消息:

socket.broadcast.emit('event', "this is a test");

【讨论】:

【参考方案3】:

我遇到了这个问题。 io.of() 让我很困惑。

当你使用 'connection' 作为 io.of() 时,

你的套接字已经有了命名空间。所以你只需添加特定的房间。

io.of(namespace).in(room).emit('functionname', data); -> sokcet.broadcast.emit('event',data);

【讨论】:

【参考方案4】:

我也遇到了这个问题。 关键是用 socket 而不是 io

这不起作用:

io.of(namespace).broadcast.to(room).emit('event', data)

但是,这将起作用:

socket.to(room).emit('event', data)

但一个缺点是,这仅在您发送的套接字位于您要发送到的名称空间中时才有效。如果您想发送到不同的命名空间,我认为这种方法行不通

【讨论】:

以上是关于Nodejs如何将消息广播到带有房间的命名空间的主要内容,如果未能解决你的问题,请参考以下文章

socket.io 只向房间 A 和 B 中的用户广播

我可以在 socket.io 的命名空间中使用房间吗

如何将文本框绑定到 XML 文件(带有命名空间)

如何使用nodejs socket.io向特定房间中的用户发送打字警报和消息

带有命名空间查询的 Apollo Client 3.0 缓存

使用 RMQ 在 Symfony Messenger 中处理来自不同命名空间的消息