Tcp 高速公路&x2B;扭曲重连

Tcp 高速公路&x2B;扭曲重连,tcp,autobahn,reactor,reconnect,twisted.internet,Tcp,Autobahn,Reactor,Reconnect,Twisted.internet,我有一系列的客户端需要通过ws协议不断连接到我的服务器。由于许多不同的原因,连接偶尔会断开。这是可以接受的,但当它发生时,我希望我的客户重新连接 目前,我的临时解决办法是让一个父进程启动客户端,当它检测到连接断开时,终止它(客户端从不处理任何关键数据,sigkill对它没有副作用)并重新启动一个新客户端。虽然这可以解决问题,但我更愿意解决实际问题 这大概是我的客户: from autobahn.twisted.websocket import WebSocketClientProtocol, W

我有一系列的客户端需要通过
ws
协议不断连接到我的服务器。由于许多不同的原因,连接偶尔会断开。这是可以接受的,但当它发生时,我希望我的客户重新连接

目前,我的临时解决办法是让一个父进程启动客户端,当它检测到连接断开时,终止它(客户端从不处理任何关键数据,sigkill对它没有副作用)并重新启动一个新客户端。虽然这可以解决问题,但我更愿意解决实际问题

这大概是我的客户:

from autobahn.twisted.websocket import WebSocketClientProtocol, WebSocketClientFactory
from twisted.internet import reactor
from threading import Thread
from time import sleep


class Client:
    def __init__(self):
        self._kill = False

        self.factory = WebSocketClientFactory("ws://0.0.0.0")
        self.factory.openHandshakeTimeout = 60  # ensures handshake doesnt timeout due to technical limitations
        self.factory.protocol = self._protocol_factory()

        self._conn = reactor.connectTCP("0.0.0.0", 1234, self.factory)
        reactor.run()

    def _protocol_factory(self):
        class ClientProtocol(WebSocketClientProtocol):
            def onConnect(self, response):
                Thread(target=_self.mainloop, daemon=True).start()

            def onClose(self, was_clean, code, reason):
                _self.on_cleanup()

        _self = self
        return ClientProtocol

    def on_cleanup(self):
        self._kill = True
        sleep(30)
        # Wait for self.mainloop to finish. 
        # It is guaranteed to exit within 30 seconds of setting _kill flag
        self._kill = False
        self._conn = reactor.connectTCP("0.0.0.0", 1234, self.factory)

    def mainloop(self):
        while not self._kill:
            sleep(1)  # does some work
此代码使客户机能够正常工作,直到第一次连接断开并尝试重新连接为止。在此过程中没有引发异常,似乎一切都在客户端正常进行,调用了
onConnect
,新的
mainloop
启动,但服务器从未收到第二次握手。不过,客户似乎认为这是有关联的


我做错了什么?为什么会发生这种情况?

我不是一个扭曲的专家,也不知道你做错了什么,但我目前正在一个项目中与Autobahn合作,我使用。也许您想检查一下将ClientFactory与Autobahn重新连接的使用情况。

我不是扭曲专家,也不知道您做错了什么,但我目前正在与Autobahn合作进行一个项目,我使用了解决重新连接问题的方法。也许您想检查一下将ClientFactory与高速公路重新连接的使用情况