node.js - socket.io 断开连接如何工作?

标签 node.js socket.io

如果套接字中没有事件,则会发生 Socket.IO 超时(断开连接),但如何检测没有事件?我没有找到相关信息。检测过程如何进行?例如: 如果用户关闭网站选项卡,会发生断开连接吗? 有什么办法让用户失去连接并且断开连接不会被执行? 即使我离开网站,缓存信息是否可能会通知我在线?

最佳答案

如果您在网络面板中打开浏览器的开发者工具,您可以将您的请求过滤为 ws 请求(Web 套接字请求),您可以在其中看到事件的 Web 套接字连接。如果您选择一种连接,您可以看到 header 、帧、cookie 和计时。如果您选择框架选项,您可以看到浏览器和 Web 套接字服务器之间发送和接收的内容。

下一张图片会让你清楚,它是 chrome 的开发者工具:

Chrome developer tools

现在你可以看到有一些数字,基本上你的浏览器和你的服务器正在打乒乓球。您可以在这个答案 SocketIO Chrome Inspector Frames 中阅读有关这些数字的更多信息。

这个乒乓球使套接字保持事件状态,因此我们知道没有超时。至于断开和连接,我建议您阅读有关 WebSockets API 的更多信息。 ,在那里你可以看到有 onclose、onerror、onmessage 和 onopen 的事件监听器。

所以回答这个问题:

For example: If user closes the website tab, occurs disconnect? There is any way user loses connection and disconnect will not be executed?

不,onclose 事件将会被触发,但即使任何宇宙原因 onclose 没有被触发,您最终也会由于超时而断开连接。

至于你的其他问题:

Is possible cache information informs that Im online even if I leave the website?

是的,这不取决于套接字,而取决于您和您的实现。您可以保留在线用户列表,并且仅不时(假设 10 分钟)更新该列表。您可以保留在线用户列表,并且在您更新在线用户列表期间,其中一些用户已经断开连接。

关于node.js - socket.io 断开连接如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37411270/

相关文章:

node.js - Next 中如何处理不同的 .env 文件?

python - 使用socket.io显示实时数据

javascript - Grails 3 访问 node_modules

c++ - nodejs的内存分布

javascript - JSON.stringify() 在值上带有单引号,在键上没有引号

node.js - 将 Bunyan 应用于大型 Node 应用程序的推荐方法?

加载 socket.io.js 时 Node.js "Uncaught SyntaxError: Unexpected token <"

node.js - Websocket apache 代理问题与 ssl

javascript - SOCKET.IO - 在两个不同浏览器中同一登录用户使用socket.id

javascript - 找不到 Node.js socket.io.js 或未定义 io