Javascript 手机上的socket.io-在设备睡眠时不断开连接,关闭浏览器,更改选项卡
我有一个基本的Socket.io实现,使用带有Express server的NodeJS。 (基本上是Socket.io网站上的入门示例) 在桌面上,它按预期连接/断开连接。当您浏览到该页面时,套接字将连接。连接事件同时在客户端和服务器端激发。当用户关闭浏览器时,套接字断开连接 但在移动设备上,这种断开连接并没有像预期的那样起作用。当您浏览到该页面时,套接字将连接,并触发事件。但是,如果用户Javascript 手机上的socket.io-在设备睡眠时不断开连接,关闭浏览器,更改选项卡,javascript,mobile,socket.io,Javascript,Mobile,Socket.io,我有一个基本的Socket.io实现,使用带有Express server的NodeJS。 (基本上是Socket.io网站上的入门示例) 在桌面上,它按预期连接/断开连接。当您浏览到该页面时,套接字将连接。连接事件同时在客户端和服务器端激发。当用户关闭浏览器时,套接字断开连接 但在移动设备上,这种断开连接并没有像预期的那样起作用。当您浏览到该页面时,套接字将连接,并触发事件。但是,如果用户 关闭浏览器应用程序(Safari或Android浏览器)(按home按钮) 切换到其他应用程序 打开一
- 关闭浏览器应用程序(Safari或Android浏览器)(按home按钮)
- 切换到其他应用程序
- 打开一个新选项卡
- 使设备进入睡眠状态(按下睡眠按钮)
Doruk据我所知,手机浏览器上没有出现“嘿,我不再看你了”这样的“事件” 不过,您可以尝试这样做的一种方法是在网页上有一个心跳信号,并在事件发生时触发客户端存储 比如说,我制作了一个聊天应用程序,我会在每条信息上用我最新的活动时间更新我的商店 或者一个网页,对于被点击的路线,我会更新我的商店以节省该活动的时间 然后我会在服务器或客户机上有一些做了某种心跳的东西 如果服务器让它以您想要的频率ping客户机并查看他们的最后一个活动是什么,如果时间超过10分钟,请断开连接。然后,您可以打开一个模式,询问类似“是否要重新连接?”的问题,当他们单击“是”时,您将重新启动套接字 或: 您可以将其放在客户机上,每30秒进行一次间隔检查,查看该存储是否已最后激活。如果时间超过10分钟,请断开套接字并标记模式消息“是否要重新连接?”
您还可以在新页面加载或输入消息时触发重新连接事件,并完全跳过模式以使其更加无缝。经过一些研究,我发现了一个不错的JS库,可以检测页面是否仍然可见;如果用户走开;或者,即使页面在一定时间内处于空闲状态 该库是ifvisible.js() 它检测到以下情况:
- 关闭浏览器应用程序
- 切换到浏览器应用程序中的其他选项卡
- 切换到其他应用程序
- 将设备置于睡眠状态(*)
因此,在这些事件的帮助下,我手动断开了套接字。有两个事件window.onblur和window.onpagehide。但它们在Android上的实现并不好。另外,Socket.io有一个bult-in-heartbeat机制,只要连接打开,我就会每隔50毫秒通过Socket连接发送数据。因此,我无法使用连接来检测客户端是否空闲。我研究更多:)