我正在嘗試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);
});
在你的客戶端代碼中,是否有'error'和'change'的處理程序?您可以在此處添加代碼,以幫助確定問題。 – Fosco
@Fosco我更新並添加了客戶端代碼。它在循環處於服務器的套接字配置時用於工作。當我將它改爲只有一個循環並將消息發送給每個停止工作的消息時。 –