删除套接字表单arrays工作不正确

当我快速刷新一个浏览器时,有时sockets对象不会从数组中删除,如果我离开它一分钟,它会减less到5或6,但从来没有回到1连接。

var io = require('socket.io').listen(server); io.sockets.on('connection', function(socket){ users.push(socket); var my_index = users.indexOf(socket); console.log("Im number " + (my_index+1) + " form " + users.length); var timer = setInterval(function(){ socket.emit('date', {'date': new Date()}); }, 1000); initSocketData(socket); socket.on('client_data', function(data){ for (var i = 0, len = users.length; i < len; i++) { users[i].emit('a_in', {'a_in': data}); } }); socket.on('disconnect', function(socket){ clearInterval(timer) if (my_index > -1) { users.splice(my_index, 1); } }); }); 

和控制台输出

 $ node socket.js Im number 1 form 1 Im number 1 form 1 Im number 1 form 1 Im number 1 form 1 Im number 2 form 2 Im number 3 form 3 Im number 4 form 4 Im number 5 form 5 Im number 6 form 6 Im number 6 form 6 Im number 7 form 7 Im number 8 form 8 Im number 9 form 9 Im number 9 form 9 Im number 10 form 10 Im number 11 form 11 

使用sync disconnect on unload标志sync disconnect on unloadsync disconnect on unload来告诉客户端在窗口closures时发送断开连接包。

 io.connect('http://adress/', {'sync disconnect on unload':true});