4

私はねじれたReconnectingClientFactoryを持っており、このファクトリで指定されたIPとポートのカップルに正常に接続できます。そしてそれはうまくいきます。

react.connectTCP(ip、port、myHandsomeReconnectingClientFactory)

この状況では、サーバーがなくなると、myHandsomeReconnectingClientFactoryは同じIPとポートに接続しようとします(予想どおり)。

私の目標は、特定のIPとポートの組み合わせで機能するサーバーがなくなったときに、バックアップサーバー(IPとポートが異なる)に接続することです。

この目標を達成する方法についてのアイデア/コメントをいただければ幸いです。

4

2 に答える 2

3

次のようなものを試してみてください:

class myHandsomeReconnectingClientFactory(protocol.ReconnectingClientFactory):

    def __init_(self, hosts):
        # hosts should be a list of tuples (host, port)
        self._hosts = hosts

    def clientConnectionFailed(self, connector, reason):
        if self.continueTrying:
            self._try_next_host(connector)

    def clientConnectionLost(self, connector, unused_reason):
        if self.continueTrying:
            self._try_next_host(connector)

    def _try_next_host(self, connector):
        # round robing of servers
        to_try = self._hosts.pop(0)
        self._hosts.append(to_try)
        connector.host, connector.port = to_try
        self.connector = connector
        self.retry()

実際にテストしたことはありませんが、少なくとも良い出発点になるはずです。よくやった。

于 2013-01-11T13:39:06.743 に答える
2

ReconnectingClientFactoryにはこの機能がありません。clientConnectionFailedほとんどの場合、ファクトリ メソッドにフックすることで、この種の再接続ロジックを実装する独自のファクトリを構築できます。これが呼び出され、サーバーの切り替えを正当化する理由 (例: ) があると思われる場合はtwisted.internet.error.ConnectionRefused、リストから次のアドレスを選択し、適切なreactor.connectXYZ方法を使用してそのアドレスに接続してみてください。

これをエンドポイントとして構築することもできます (これは一部で好まれている新しい高レベルの接続セットアップ API です) が、エンドポイントとの再接続の処理はまだ十分に文書化されたトピックではありません。

于 2013-01-10T19:55:41.597 に答える