2

twisted.internet.protocol.ReconnectingClientFactory に基づくクライアントがあります。現在のサーバーでの再試行回数に達したときに、このクライアントを別のサーバーに切り替えるようにします。server1 に接続すると 5 回失敗し、server2 に切り替えます

現在、再接続ファクトリーの再試行機能で宛先ホストとポートを変更することでこれを実装しています。

class Factory(twisted.internet.protocol.ReconnectingClientFactory, object):

    def retry(self, connector=None):
    """ Retry to connect to the host. After the Max retries count is reached, 
    switch to an alternative host if available """

    if connector is None:
        if self.connector is None:
            raise ValueError("no connector to retry")
        else:
            connector = self.connector


    if self.retries >= self.maxRetries and self.alt_host is not None:
        # Try to connect to alternate server
        currrent_host, current_port = connector.host, connector.port
        connector.host, connector.port = self.alt_host, self.alt_port
        self.alt_host, self.alt_port = currrent_host, current_port
        print ("Switching to server: %s:%s" % (connector.host, connector.port))
        # Connector gets new address
        connector.getDestination() 
        # reset number of retries
        self.resetDelay()                

    super(Factory, self).retry(connector)

    def addHost(self, host, port):
         """ Add a second host/port to try to connected to once max number of retries has been done"""
        self.alt_host = host
        self.alt_port = port

このコードを次のように呼び出します。

factory = Factory()
reactor.connectTCP(self.host, self.port, factory)
factory.addHost(self.alt_host, self.alt_port)

2 番目のサーバーのアドレスを工場に送信する必要があるため、これは満足のいくものではありません。2 番目の reactor.connectTCP() 呼び出しに基づく別のソリューション、またはツイスト メカニクスのより適切な使用法 (遅延?) を探しています。

4

0 に答える 0