Node.js(Socket.io) – 我不想运行断开,如果用户正在切换页面

目前每当用户切换一个页面,这个代码块运行immediatley:

// when the user disconnects.. perform this socket.on('disconnect', function(){ delete SiteRooms[socket.username]; io.sockets.emit('updateusers', usernames); io.sockets.emit('updateroomusers', SiteRooms); }); 

我不想运行这个,如果用户只是在我的网站上切换页面,有什么办法可以做到这一点?

我正在考虑一个计时器,也许把它设置为50秒 – 也许把它设置为30秒,如果不存在的话,那么断开连接。 但我不知道这是一个很好的解决scheme,也不知道如何编写实际的代码。

有任何想法吗?

事件触发是正确的。 当用户切换页面时,该页面的整个执行上下文结束,并停止任何脚本。 这包括Socket.IO的客户端代码。

你有几个select。 一个select是用AJAX加载你的页面内容。 这并不总是理想的…这取决于你的网站做了什么,以及它是如何build立的。

另一个select是自己来build立这个延迟。 无论你在哪里保存用户数据,只要将一个属性添加到该对象,并保持超时时间,然而你需要很多秒钟。 如果用户重新连接,请在触发之前清除超时。

您可以通过改变页面内容的脚本来改变链接。 我不是经历过,但我认为JADE有助于做这样的事情。 你在github上有一些例子:

https://github.com/visionmedia/jade

我认为replace块可能是一个解决scheme。