NodeJS socket IO停止随机发出?

21 浏览
0 Comments

NodeJS socket IO停止随机发出?

我正在运行Node 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')});

编辑2:在更新到最新版本的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);

虽然这个函数每秒运行一次,但它从未记录过socket已断开连接,即使它不再接收任何内容,仍然发送心跳。

编辑3:好吧,这是我的服务器端代码的问题,一些socket被销毁了。还更新到v1.x并强制重新连接。

0