【问题标题】:Tornado websocket pingsTornado websocket ping
【发布时间】:2017-02-17 11:03:10
【问题描述】:

我正在运行一个带有 WebSocket 处理程序的 Python Tornado 服务器。 我们注意到,如果我们突然断开客户端(例如断开电缆),服务器没有任何迹象表明连接已断开。没有引发 on_close 事件。 有解决方法吗? 我读过有一个发送 ping 的选项,但没有看到有人在在线示例中使用它,也不知道如何使用它以及它是否能解决这个问题。

【问题讨论】:

  • 你有答案
  • 我们实现了 ping/pong:def do_ping(self): if self.is_active: if not self.received_pong: self.retries += 1 if self.retries == 3: logger.info() self.on_close() return else: logger.info() self.received_pong = False self.ping('data') tornado.ioloop.IOLoop.current().call_later(20, self.do_ping) def on_pong(self, data): self.received_pong = True self.retries = 0

标签: python websocket tornado


【解决方案1】:

on_close 事件只能在连接关闭时触发。

您可以发送ping 并等待on_pong 事件。

超时通常很难检测到,因为您甚至不会收到套接字已关闭的消息。

【讨论】:

  • 你能分享一个例子吗
猜你喜欢
  • 2015-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-16
  • 2020-12-29
相关资源
最近更新 更多