我正在运行Node 0.6.16,并且所有模块都是最新的,至少根据npm来看是这样的(win7 x64)。 我注意到,即使没有发生任何断开连接,但由于某种原因,经过一段时间后,我无法确定,可能是1小时后,浏览器不会接收到任何数据。 在Firefox上似乎比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);
虽然该函数每秒运行一次,但即使它不再接收任何数据并仍在发送心跳,它也从未记录套接字已断开连接的日志...。编辑3:好吧,问题出在我的服务器端代码上,一些套接字被销毁了。我还更新到了v1.x,并强制重新连接。