Socket.io不发送消息到所有连接的套接字
我正在尝试node.js和socket.io。我不想使用删除ping功能,我必须从我的服务器获取更新。下面是我在做什么的示例代码:Socket.io不发送消息到所有连接的套接字
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()调试控制台告诉我这是在做什么,但它看起来像它没有得到客户。因为他们什么都不做。
我使用每个连接的客户端有一个间隔,当我使用socket.emit()它确实工作。但这不是最佳解决方案。
更新: 这是我的客户端代码。
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作为参考
本质两个变化
-
在服务器侧 - 改变
socket.on
到socket.sockets.on
var socket = io.listen(server); socket.sockets.on('connection', function(client)
-
在客户端 - URL和端口不是必需的,因为它是自动检测的。
var socket = io.connect();
这已经使用快递2.5.2和Socket.io测试0.8.7
我已经混合了与我的服务器代码,你就可以尝试这种在服务器上,我的client javascript和client 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();
});
几个小时后,我把头靠在墙上,让我从树林里走出来。 Socket.IO文档是垃圾。 Upvote,谢谢! – Thomas
在你的客户端代码中,是否有'error'和'change'的处理程序?您可以在此处添加代码,以帮助确定问题。 – Fosco
@Fosco我更新并添加了客户端代码。它在循环处于服务器的套接字配置时用于工作。当我将它改为只有一个循环并将消息发送给每个停止工作的消息时。 –