Python #把它交给打电话的人。 类错误收集器(对象): 异常=无 定义调用(自身,故障): self.exception=failure.value 反应堆停止() connect\u error=ErrorCollector() d、 加法器返回(连接错误) #现在进入扭曲反应器回路 反应堆运行() #如果由于连接错误而退出,请将其发送到 #来电者 如果连接错误。异常: 引发连接错误。异常 其他: #让调用者处理任何错误 返回d

Python #把它交给打电话的人。 类错误收集器(对象): 异常=无 定义调用(自身,故障): self.exception=failure.value 反应堆停止() connect\u error=ErrorCollector() d、 加法器返回(连接错误) #现在进入扭曲反应器回路 反应堆运行() #如果由于连接错误而退出,请将其发送到 #来电者 如果连接错误。异常: 引发连接错误。异常 其他: #让调用者处理任何错误 返回d,python,twisted,autobahn,Python,Twisted,Autobahn,我得到的错误是: 2016-10-09T21:00:40+0100 Connection to/from tcp4:xxx.xx.xx.xx:xxx was lost in a non-clean fashion: Connection lost 2016-10-09T21:00:40+0100 _connectionLost: [Failure instance: Traceback (failure with no frames): : Connection to the other sid

我得到的错误是:

2016-10-09T21:00:40+0100 Connection to/from tcp4:xxx.xx.xx.xx:xxx was lost in a non-clean fashion: Connection lost 2016-10-09T21:00:40+0100 _connectionLost: [Failure instance: Traceback (failure with no frames): : Connection to the other side was lost in a non-clean fashion: Connection l ost. ] 2016-10-09T21:00:40+0100 WAMP-over-WebSocket transport lost: wasClean=False, code=1006, reason="connection was closed uncleanly (peer dropped the TCP connection without previous WebSocket closing handshake)" 2016-10-09T21:10:39+0100 EXCEPTION: no messages received 2016-10-09T21:10:39+0100 Traceback (most recent call last): 2016-10-09T21:00:40+0100与tcp4的连接:xxx.xx.xx.xx:xxx以非干净方式丢失:连接丢失 2016-10-09T21:00:40+0100_connectionLost:[故障实例:回溯(无帧故障)::与另一侧的连接以非干净方式丢失:连接l 奥斯特。 ] 2016-10-09T21:00:40+0100 WAMP over WebSocket传输丢失:wasClean=False,code=1006,reason=“连接不干净地关闭了(对等方在没有之前的WebSocket关闭握手的情况下丢弃了TCP连接)” 2016-10-09T21:10:39+0100异常:未收到任何消息 2016-10-09T21:10:39+0100回溯(最近一次通话):
如果您使用的是Twisted,则可以使用
重新连接ClientFactory
。不幸的是,似乎没有预先构建的带有此功能的
ApplicationRunner
的实现,但单独实现似乎并不困难。这应该是直接向前扭曲。您可以这样做,因为开发团队似乎希望合并重新连接的客户端。

下面是一个自动重新连接ApplicationRunner的示例。启用自动重新连接的重要线路是:

runner.run(session, auto_reconnect=True)

您还需要激活自动WebSocket ping/pong(例如在Crossbar.io中),以a)最大限度地减少由于超时而导致的连接中断,以及b)允许快速检测丢失的连接。

您是否尝试过
pip3安装autobahn autoreconnect

# from autobahn.asyncio.wamp import ApplicationRunner
from autobahn_autoreconnect import ApplicationRunner

我只知道如何使用twisted禁用SSL验证,所以我一直坚持这样做。(你链接了我的(bizso09)。我编辑了这个问题,试图实现ReconnectingClientFactory,但从未调用重新连接代码。你能看一下吗?谢谢。我注意到一件事,没有调用来重置factory类中的重新连接延迟(即)。您可能必须这样做才能提示Twisted尽快尝试重新连接,而不是隔段时间等待。我不确定这是否是重新连接没有发生的原因。另一个问题是从未调用方法
clientConnectionLost
。正如您在错误输出日志中看到的,print语句不存在。我在源代码中跟踪了打印的错误,它通过
WampWebSocketClientProtocol
类调用会话的
onClose
方法。这似乎完全绕过了重新连接工厂?而且,在我的例子中,似乎是服务器强制断开了连接,但这不重要吗?这很奇怪。我刚刚尝试了重新连接代码的示例,对我来说效果很好。您的日志显示它没有完全断开连接,这意味着连接突然丢失。可能有防火墙规则可以删除空闲连接?如果我断开internet连接,那么它似乎会重新连接。但是,对于其他ti,我仍然会收到上面的错误消息mes。我想这可能与服务器重启/部署有关。如果我想在我的
组件
类中处理
onClose
,然后重新连接,我应该调用什么?我可以启动另一个
ApplicationRunner
实例吗?似乎主扭曲循环线程被称为
reactor
,它是全局的,所以不确定两次调用application runner对脚本的影响。目前,我的解决方案是在检测到连接断开时,使用操作系统级别的命令重新启动脚本,这是非常令人讨厌的。
runner.run(session, auto_reconnect=True)
# from autobahn.asyncio.wamp import ApplicationRunner
from autobahn_autoreconnect import ApplicationRunner