python - 如何管理过时的 websocket 连接
问题描述
使用 Python Websockets [1] 从浏览器管理一组服务器端 websocket 连接。它们必须进行注册和维护。
问题:当用户断开旧连接时,注册表中仍然存在。此外,如果用户刷新浏览器(1、2、17 或 n 次),或者存在重新连接脚本,则会注册更多无效连接。这会创建一个充满陈旧连接的注册表。
文档解决了这个问题,如下所示:
如上面的同步示例所示,如果需要维护当前连接的客户端列表,则必须在连接时注册,在断开连接时取消注册。
如何正确识别和删除过时的连接?是否需要某种 ping/pong 方案?
我确实在 [2] 中找到了代码,但它可以追溯到 2018 年。这是过时的,还是已经解决了这个问题?
参考:
解决方案
基本上,是的,ping/pong 方案用于确保连接。TCP 使用与keep-alive
. 每 X 秒发送一次 ping,如果客户端未命中 N 次,则可以安全地假设客户端连接已死并且可以删除。您提供的链接#2本质上是如何实现保持活动的要点。这是一个使用的例子autobahn
,它有很多我在其他框架中没有见过的生活质量特性。
我可能是错的,但我认为当您刷新浏览器时,websockets 会发送某种“断开连接”信号,因此您应该能够以这种方式终止连接。我已经有几年没有使用 websockets 了,但我建议将你的 UI 设置为单页应用程序并“劝阻”用户不要刷新。但并非总是如此。
推荐阅读
- android - 是否可以创建引用公共模块的正确目标的 kotlin 多平台项目?
- grafana - 在带有令牌身份验证的 iframe 中,在 nginx 反向代理后面设置 Grafana docker
- javascript - 将此引用更改为 vue 实例
- ios - 截断单词末尾的渐变淡入淡出
- python - 如何告诉 Googletrans 忽略某些部分?
- css - 当文本方向设置为“从右到左”时,MathJax 2.7.5 的宽度问题
- c++ - 如何最大化总概率?
- javascript - 选择两个或多个复选框时的所有过滤器项目
- r - R中的频率分布
- javascript - 猫头鹰旋转木马:如何更改第四项的大小