首页 > 解决方案 > 如何管理过时的 websocket 连接

问题描述

使用 Python Websockets [1] 从浏览器管理一组服务器端 websocket 连接。它们必须进行注册和维护。

问题:当用户断开旧连接时,注册表中仍然存在。此外,如果用户刷新浏览器(1、2、17 或 n 次),或者存在重新连接脚本,则会注册更多无效连接。这会创建一个充满陈旧连接的注册表。

文档解决了这个问题,如下所示:

如上面的同步示例所示,如果需要维护当前连接的客户端列表,则必须在连接时注册,在断开连接时取消注册。

如何正确识别和删除过时的连接?是否需要某种 ping/pong 方案?

我确实在 [2] 中找到了代码,但它可以追溯到 2018 年。这是过时的,还是已经解决了这个问题?

参考:

  1. https://websockets.readthedocs.io/en/stable/intro.html
  2. https://github.com/aaugustin/websockets/issues/414

标签: pythonwebsocketpython-asynciopingdebounce

解决方案


基本上,是的,ping/pong 方案用于确保连接。TCP 使用与keep-alive. 每 X 秒发送一次 ping,如果客户端未命中 N 次,则可以安全地假设客户端连接已死并且可以删除。您提供的链接#2本质上是如何实现保持活动的要点。这是一个使用的例子autobahn,它有很多我在其他框架中没有见过的生活质量特性。

我可能是错的,但我认为当您刷新浏览器时,websockets 会发送某种“断开连接”信号,因此您应该能够以这种方式终止连接。我已经有几年没有使用 websockets 了,但我建议将你的 UI 设置为单页应用程序并“劝阻”用户不要刷新。但并非总是如此。


推荐阅读