高速公路:捕获 sendMessage 错误

Autobahn: catch sendMessage error

如何捕获 sendMessage 错误?没有异常传播。当服务器关闭时(半开连接)我想在我的客户端代码中捕获错误。如果运行 websocket 守护程序的服务器崩溃、重新启动、失去网络连接 closeConnection/ConnectionLost/ConnectionFailed 回调将不起作用。

from autobahn.websocket import WebSocketClientProtocol

class ClientProtocol(WebSocketClientProtocol):
    def onOpen(self):
        def heartbeat():
            self.sendMessage("HB")
            self.factory.reactor.callLater(1, heartbeat)

        # I want to catch a socket error   
        try:
            heartbeat()
        except Exception as e:  
            print e

也许有比这更好的解决方案。乒乓 ?只是我找不到我的客户端如何检测服务器 crash/reboots 然后重新连接的方法。

我正在使用高速公路 0.6.5

是的,有一个更好的快速检测丢失连接的解决方案:WebSocket ping/pong。这是内置于 WebSocket 协议中的。

AutobahnPython 支持自动 WebSocket Ping/Pong,主要针对这种情况(快速连接丢失检测和连接保持活动)。

您可以使用这些参数激活它:

  • autoPingInterval
  • autoPingTimeout
  • autoPingSize

可以为 servers and clients.

设置

您需要最新的 AutobahnPython 版本(我认为是 0.9.4+)。您的 (0.6.5) 没有该功能。