插座的NodeJS IO停止发射随机?(NodeJS socket IO stop emitting

2019-07-29 08:39发布

我运行节点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)和节点v0.10.35后,我仍然有同样的问题。 更令人惊讶的,我加了下面的一段在客户端的代码:

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

intv = setInterval(checkSocket, 1000);

虽然函数运行每一秒,它永远不会记录在插槽中断开,即使它没有再收到任何东西,仍然发送心跳..

EDIT3:好它是在我的服务器端代码,一些插座正在遭到破坏。 也更新到版本1.x和强迫重新连接。

Answer 1:

所以,因为它似乎我没有更多的问题,我想我会分享我的后端代码。 我的问题我认为是,我是覆盖插座。

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];     
   });
});


文章来源: NodeJS socket IO stop emitting randomly?