【发布时间】:2011-10-02 16:29:04
【问题描述】:
我正在试用 node.js 和 socket.io。我不想用来删除我必须从我的服务器获取更新的 ping 功能。这是我正在做的示例代码:
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);
});
【问题讨论】:
-
在您的客户端代码中,是否有
error和change的处理程序?您可以在此处包含该代码,这可能有助于确定问题。 -
@Fosco 我更新并添加了客户端代码。它曾经在循环位于服务器中的套接字配置上时工作。当我将其更改为仅一个循环并将消息发送给它停止工作的每个循环时。