处理浏览器重新加载socket.io

socket.io中有一种方法在断开的事件中创build一个超时,然后检查用户是否已经重新连接?

这个想法是只有当用户在超时之后没有重新连接时才发送数据/保存数据库中的用户状态

编辑 :遵循@Are Wojciechowski答案,我完成了一个多标签&F5洪水处理程序

https://gist.github.com/foohey/7696811

有一个socket.on('disconnect', function () { ... }); 。 所以你可以做

 socket.on('disconnect', function () { setTimeout(function () { //do something }, 10000); }); 

编辑1:

我现在明白了 所以也许你应该这样做:

客户:

 //right after connection socket.emit('register', localstorage.getItem('gameUniqueId')); //somewhere, when game starts var randomlyGeneratedUID = Math.random().toString(36).substring(3,16) + +new Date; localStorage.setItem('gameUniqueId', randomlyGeneratedUID); 

服务器:

 io.sockets.on('connection', function (socket) { var player = null; socket.on('register', function (data) { if (data !== null) { //there was something in localstorage if (game.Players.existsUID(data)) { player = game.Players.getByUID(data); player.disconnected = false; } else { //timed out, create new player } } else { //localStorage is not set, create new player } }); socket.on('disconnect', function () { player.disconnected = true; setTimeout(function () { if (player.disconnected) player.delete(); }, 10000); }); });