Tornado Websocket的ping/pong实现

6

我用 tornado.websocket.WebSocketClientConnection 实现了一个基于 Python 的 websocket client,它连接到远程服务器并通过 websocket 通信。之前,在应用层实现了类似于 ping/pong 的反馈机制,以确保远程端点是否仍然响应。

最近我刚更新了 tornado 包,并遇到了 WebSocketClientConnection 中的 ping_interval。我删除了旧的应用层 ping/pong 机制,并在我的实现中添加了这个 ping_interval

更新后,websocket 在所述的 ping_interval timeout 后关闭。远程端点的服务器在传输层处理 ping 并相应地做出响应。

  1. 目前我尚未实现 ping 方法,那么我是否需要为 WebSocketClientConnection 实现 ping 方法?
  2. 我需要在 ping 方法中发送任何数据吗?
  3. 我需要实现任何方法来处理远程服务器发送的 ping 请求的响应吗?
1个回答

6
  1. 不需要,已默认实现
  2. 可以发送ping但不是必须的
  3. 我猜你说的response是指pong。如果使用了ping_interval,则无需处理pong,但是如果手动发送ping,则必须通过实现tornado.websocket.WebSocketClientConnection.on_pong方法来控制超时并处理pong。

嗨@Fian,如果我的服务器也是tornado并使用WebSocketHandler实现websocket,那么WebSocketHandler是否也必须发送pong来处理使用WebSocketClientConnection发送的ping? - A J Brockberg
WebSocketClientConnection和WebSocketHandler都基于WebSocketProtocol13类,该类默认进行定期ping操作,并在ping_interval时间内未收到pong时结束连接。 - Fine

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接