【问题标题】:Socket.io 0.7 can not call broadcast.send?Socket.io 0.7 不能调用broadcast.send?
【发布时间】:2011-08-09 09:01:31
【问题描述】:

在 socket.io 0.6 中,我有以下示例代码:

var io = require('/usr/lib/node_modules/socket.io');
var server = http.createServer(function(req,res){
      var path = url.parse(req.url).pathname;
      switch( path ){
           ....
           //core codes
           socket.broadcast(data);
      }
}).listen(8080);

// ... ...

var socket = io.listen(server);

一切顺利。

但现在我已将 socket.io 更新为 0.7 并将 socket.broadcast 更改为 socket.sockets.broadcast.send(data) ;

遇到异常:无法调用“未定义”的发送?

谁能告诉我如何在不监听某个事件的情况下向所有人发送数据?

也许这是一种方法:

clients = new Array();
socket.on('connection',function(socket){ clients.push(socket);}
// ...
for(s in clients) s.send(data);
// ...

真的需要这样吗?

谢谢!

【问题讨论】:

  • 只是一个旁注:不要使用 for(in) 来迭代数组,而是使用 for(;;)。
  • 是的,我愿意!但还有什么想法?

标签: node.js socket.io


【解决方案1】:

在 socket.io 0.7 中你可以这样做:

io.sockets.send() // broadcasts to all connected users
io.sockets.json.send() // broadcasts JSON to all connected users
io.sockets.emit('eventname') // broadcasts and emit

或命名空间

io.of('/namespace').send('msg'); // broadcast to all connect users in /namespace

【讨论】:

  • 因为io.socketsio.of('/namespace') 上不存在广播方法,我们想明确区分socket.broadcast(它广播到所有连接的套接字,除了!当前套接字)和io.socket.send 将其发送给所有用户,没有任何例外。
【解决方案2】:

你可以这样做

var io = require('socket.io').listen(80);
io.sockets.on('connection', function (socket) {
  socket.broadcast.emit('user connected');
});

【讨论】:

  • 我不认为他是正确的方法。它应该是io.on('connection')(或socket.onsioServer.on 或任何require('socket.io').listen 的返回值被调用)。
  • 代码 sn-p 来自 socket.io 网站 - 绝对正确。
  • 是的,我在使用命名空间时感到困惑,因为当时的语法有点不同。对不起!
【解决方案3】:

使用

sioServer.sockets.on('connection', function (client) {
    client.broadcast.send('Hello, Everybody else!');
});

向所有其他连接的客户端广播(除了广播client自己)并使用

sioServer.sockets.on('connection', function (client) {
    sioServer.sockets.send('Hello, Everybody!');
});

向所有人广播(包括client本人)。

【讨论】:

  • 不,我不想听事件!该消息是由 php 从 curl 发布的,并且只直接发送给每个客户端!
  • 第二个示例也可以在 Express/Connect 路径内或代码中的其他任何地方工作。
猜你喜欢
  • 1970-01-01
  • 2011-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-16
  • 2013-11-09
相关资源
最近更新 更多