Eri*_*ric 25 javascript node.js socket.io
我正在运行Node 0.6.16并且所有模块都是最新的,至少根据npm(win7 x64).我注意到,即使我没有断线,但由于某种原因,过了一段时间,我不知道,也许1小时,浏览器没有收到任何数据.它似乎在FF上比在Chrome上更频繁.
socket.on('disconnect', function (){console.log('disconnected')});
Run Code Online (Sandbox Code Playgroud)
这永远不会触发该特定事件(我的意思是它可能会发生,但后来我得到了日志和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')});
Run Code Online (Sandbox Code Playgroud)
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);
Run Code Online (Sandbox Code Playgroud)
虽然该函数每秒运行一次,但它永远不会记录套接字断开连接,即使它不再接收任何内容并仍然发送心跳.
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];
});
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2501 次 |
| 最近记录: |