如何在Socket.IO中向客户端广播消息?

时间:2012-01-18 10:50:53

标签: node.js socket.io

以下是来自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(...);
我是对的吗?

2 个答案:

答案 0 :(得分:1)

来自官方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');
});

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

答案 1 :(得分:0)

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

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

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