我正在尝试 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(){});
});
Run Code Online (Sandbox Code Playgroud)
这里的问题是,当我调用 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);
});
Run Code Online (Sandbox Code Playgroud)
几天前遇到了一个非常相似的问题,看起来 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)
Run Code Online (Sandbox Code Playgroud)在客户端 - URL 和端口不需要,因为它是自动检测的。
var socket = io.connect();
Run Code Online (Sandbox Code Playgroud)这已经使用 Express 2.5.2 和 Socket.io 0.8.7 进行了测试
我已将您的服务器代码与我的服务器代码合并,您能否在服务器和我的客户端 javascript和客户端 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();
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3985 次 |
| 最近记录: |