Socket.io不会向所有连接的套接字发送消息

我正在尝试node.js和socket.io。 我不想使用删除pingfunction,我必须从我的服务器获取更新。 这是我正在做的一个示例代码:

var app = require('http').createServer(), io = require('socket.io').listen(app), cp = require('child_process'); app.listen(8080); //I check a global value for all the connected users from the php command line var t = setInterval(function(){ cp.exec('/usr/bin/php /Users/crear/Projects/MandaFree/symfony api:getRemainingMessages', function(err, stdout){ if (err) { io.sockets.emit('error', 'An error ocurred while running child process.'); } else { io.sockets.emit('change', stdout); } console.log('Remaining messages: ' + stdout); }); }, 3000); var remaining = io.of('/getRemainingMessages') .on('connection', function(socket){ socket.on('disconnect', function(){}); }); 

这里的问题是,当我调用io.sockets.emit()debugging控制台告诉我它正在做的事情,但它看起来没有得到客户端。 因为他们什么都不做。

我用每个连接的客户端有一个时间间隔,当我使用socket.emit()它工作。 但这不是最佳解决scheme。

更新:这是我的客户端代码。

 var remaining = io.connect('http://127.0.0.1:8080/getRemainingMessages'); remaining.on('change', function(data){ console.log('Remaining messages: ' + data ); $('#count').html(data); }); remaining.on('error', function(error){ console.log(error); }); 

几天前有一个非常类似的问题,看起来像socket.io在API中有一些变化。 我从来没有与symfony合作过,希望问题是一样的。

我有一个socket.io发送和接收消息的工作演示 – 上传到https://github.com/parj/node-websocket-demo作为参考

基本上是两个变化

  1. 在服务器端 – 将socket.on更改为socket.sockets.on

     var socket = io.listen(server); socket.sockets.on('connection', function(client) 
  2. 在客户端 – 不需要URL和端口,因为它是自动检测的。

     var socket = io.connect(); 

这已经使用Express 2.5.2和Socket.io 0.8.7进行了testing

我已经合并你的服务器代码与我的,你能够尝试在服务器上,我的客户端JavaScript和客户端HTML只是为了看看它是否工作?

 var socket = io.listen(server); socket.sockets.on('connection', function(client){ var connected = true; client.on('message', function(m){ sys.log('Message received: '+m); }); client.on('disconnect', function(){ connected = false; }); var t = setInterval(function(){ if (!connected) { return; } cp.exec('/usr/bin/php /Users/crear/Projects/MandaFree/symfony api:getRemainingMessages', function(err, stdout){ if (err) { client.send('error : An error ocurred while running child process.'); } else { client.send('change : ' + stdout); } console.log('Remaining messages: ' + stdout); }); }, 3000); t(); });