如何在Socket.IO中向特定命名空间的客户端广播消息?

发布于 2024-12-27 10:02:33 字数 662 浏览 2 评论 0原文

这是来自 socket.io 网站的示例:

var io = require('socket.io').listen(80);

var chat = io
  .of('/chat')
  .on('connection', function (socket) {
    socket.emit('a message', {
        that: 'only'
      , '/chat': 'will get'
    });
    chat.emit('a message', {
        everyone: 'in'
      , '/chat': 'will get'
    });
  });

var news = io
  .of('/news')
  .on('connection', function (socket) {
    socket.emit('item', { news: 'item' });
  });

通常我使用 io.sockets.emit(...) 向客户端广播数据。但是如何向与命名空间连接的客户端广播消息呢?换句话说,如何向所有订阅新闻的客户端发送消息,而不是向那些订阅聊天的客户端发送消息?

更新: 我想我知道答案:

news.sockets.emit(...);

我是对的吗?

Here is a sample from socket.io website:

var io = require('socket.io').listen(80);

var chat = io
  .of('/chat')
  .on('connection', function (socket) {
    socket.emit('a message', {
        that: 'only'
      , '/chat': 'will get'
    });
    chat.emit('a message', {
        everyone: 'in'
      , '/chat': 'will get'
    });
  });

var news = io
  .of('/news')
  .on('connection', function (socket) {
    socket.emit('item', { news: 'item' });
  });

normally I use io.sockets.emit(...) to broadcast data to the clients. But how to broadcast messages to clients connected with namespace? In other words how to send message to all clients subscribed to news, and not to those who subscribed to chat?

UPDATE:
I guess I know the answer:

news.sockets.emit(...);

am I correct?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

前事休说 2025-01-03 10:02:33

来自官方 github 上的示例

var io = require('socket.io').listen(80);

io.sockets.on('connection', function (socket) {
  socket.join('justin bieber fans');
  socket.broadcast.to('justin bieber fans').emit('new fan');
  io.sockets.in('rammstein fans').emit('new non-fan');
});

因此,如果您想向所有连接的客户端发送消息您可以使用 io.sockets.in('namespace').emit('message') 命名空间。

From an official example on github:

var io = require('socket.io').listen(80);

io.sockets.on('connection', function (socket) {
  socket.join('justin bieber fans');
  socket.broadcast.to('justin bieber fans').emit('new fan');
  io.sockets.in('rammstein fans').emit('new non-fan');
});

So if you want to send a message to all the connected clients in a namespace you can use io.sockets.in('namespace').emit('message').

帥小哥 2025-01-03 10:02:33

您可以尝试使用以下内容:

io.of('/news').emit('data', data);

就我而言,它有效(版本“socket.io”:“^1.0.0-pre2”)。

You can try to use the following:

io.of('/news').emit('data', data);

In my case it works(version "socket.io":"^1.0.0-pre2").

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文