NodeJS socket IO停止随机发射?

我正在运行Node 0.6.16,所有的模块都是最新的,至less根据npm(win7 x64)。 我可以注意到,即使我没有断开连接,但由于某种原因,一段时间后,我不能说,也许一个小时,浏览器没有收到任何数据。 FF比在Chrome上更频繁。

socket.on('disconnect', function (){console.log('disconnected')}); 

这永远不会为特定的事件触发(我的意思是可能发生,但是然后我得到日志和socket.io汽车重新连接 – 在这种情况下,没有任何反应,它只是停止工作,这是最常见的事件)。

所以我不知道在哪里看。 NodeJS仍然logging心跳,但由于某种原因,连接没有通过。 我怀疑,在(任何?)浏览器的选项卡更改,一段时间后,由于窗口/选项卡不再有焦点,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)和节点v0.10.35后,我仍然有同样的问题。 更令人惊讶的是,我在客户端添加了以下一段代码:

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

当函数每秒运行时,即使它没有收到任何东西,仍然被发送心跳,它从不logging套接字断开。

编辑3:好吧,这是在我的服务器端代码,一些套接字被破坏。 也更新到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]; }); }); 

希望这有助于某人。