node.js와 socket.io를 시험 중입니다. 내 서버에서 업데이트를 가져와야하는 핑 기능을 제거하는 데 사용하지 않을 것입니다. 여기에 내가 뭘하는지의 예제 코드는 다음과 같습니다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 클라이언트 측 코드를 업데이트하고 추가했습니다. 루프가 서버의 소켓 구성에있을 때 작동합니다. 하나의 루프로 변경하고 모든 사람에게 메시지를 보내면 작동이 멈췄습니다. –