【问题标题】:How to manage stale websocket connections如何管理过时的 websocket 连接
【发布时间】:2020-12-17 17:16:59
【问题描述】:

使用 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

【问题讨论】:

    标签: python websocket python-asyncio ping debounce


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-26
      • 1970-01-01
      • 2018-04-13
      • 1970-01-01
      • 1970-01-01
      • 2019-05-07
      • 1970-01-01
      相关资源
      最近更新 更多