Javascript NodeJS套接字IO是否停止随机发射?

Javascript NodeJS套接字IO是否停止随机发射?,javascript,node.js,socket.io,Javascript,Node.js,Socket.io,我正在运行节点0.6.16,所有模块都是最新的,至少符合npm(win7 x64)。我可以注意到,即使我没有断开连接,但由于某种原因,过了一段时间,我无法判断,可能是1个小时,浏览器没有收到任何数据。在FF上比在Chrome上更频繁 socket.on('disconnect', function (){console.log('disconnected')}); 这不会为特定事件触发(我的意思是它可能会发生,但我会自动重新连接日志和socket.io-在这种情况下,不会发生任何事情,它只是停

我正在运行节点0.6.16,所有模块都是最新的,至少符合npm(win7 x64)。我可以注意到,即使我没有断开连接,但由于某种原因,过了一段时间,我无法判断,可能是1个小时,浏览器没有收到任何数据。在FF上比在Chrome上更频繁

socket.on('disconnect', function (){console.log('disconnected')});
这不会为特定事件触发(我的意思是它可能会发生,但我会自动重新连接日志和socket.io-在这种情况下,不会发生任何事情,它只是停止工作,这是最常见的事件)

所以我不知道去哪里找。NodeJS仍然记录心跳,但由于某种原因,连接没有通过。我怀疑,在(任何?)浏览器的选项卡更改时,过了一段时间,由于窗口/选项卡不再具有焦点,socket.io会停止接收数据吗?我可能错了,也可能与焦点无关,但这是我的主要线索。还有人有什么想法吗

编辑:客户端非常简单:

socket = io.connect('http://xxx.xxx.xxx.xxx:8081', {secure:false, 'reconnect': true, 'reconnection delay': 500, 'max reconnection attempts': 10});      
            socket.on('connect', function(){console.log('connected')});
            socket.on('message', function(data){//do something);        

            socket.on('disconnect', function (){console.log('disconnected')});
Edit2:更新到socket.io(1.2.1)和node v0.10.35的最新版本后,我仍然存在相同的问题。更令人惊讶的是,我在客户端添加了以下代码:

function checkSocket(){
    if(socket){
        if(!socket.connected){
            console.log('socket disconnected');
            clearInterval(intv);
        }
    }       
}

intv = setInterval(checkSocket, 1000);
虽然该函数每秒运行一次,但它从不记录套接字断开连接的情况,即使它不再接收任何内容,并且仍在发送心跳


Edit3:好,这是我的服务器端代码,一些套接字被破坏。还更新到v1.x和强制重新连接。

因此,既然我似乎没有更多问题,我想我会分享我的后端代码。我认为我的问题是我正在覆盖套接字

var clients = {};
var app = require('https').createServer(options),
io = require('socket.io').listen(app);  
app.listen(8081);

io.sockets.on('connection', function(__socket) {
    var id = __socket.id;
    var ip = __socket.request.connection.remoteAddress;
    clients[id] = {socket:__socket, ip:ip}; 
    clients[id].socket.on('disconnect', function() {
        delete clients[id];     
   });
});

目前我正在做相同的设置(node.js和socket.io),它在所有浏览器上都非常适合我,也许你可以给我们看一些你的客户端代码,我认为现在必须解决这个问题。我也有这个问题。我的项目是一台收音机,需要插座才能播放当前播放的歌曲/封面。长轮询以前工作过,但对于大量请求失败。我最终绑定到window blur和focus,并使用setTimeout发出重新加入房间的请求(然后重新发送相关数据)。希望有一天能找到更好的解决方案!谢谢你的评论。我还没弄明白…你能举一个完整的例子让我们做个实验吗?我怀疑这并不是一个真正的问题,这是有记录的。除非发生灾难性事件,否则Socket.IO不会真正断开连接。许多暂时性的连接问题被Socket.IO本身隐藏和吞没。另外,您使用的是什么交通工具?最后,如果您可以记录数据包捕获,那将非常有用。