gpt4 book ai didi

node.js - Socket.io 未向所有连接的套接字发送消息

转载 作者:太空宇宙 更新时间:2023-11-03 22:03:19 25 4
gpt4 key购买 nike

我正在尝试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);
});

最佳答案

几天前遇到了一个非常类似的问题,看起来 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 进行了测试

我已将您的服务器代码与我的服务器代码合并,您可以在服务器和我的 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();

});

关于node.js - Socket.io 未向所有连接的套接字发送消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7627626/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com