2

私は2つのサーバーを持っています:

application = service.Application("APP")

factory_a = MyFactory()
service_1 = internet.TCPServer(LPORT_1, factory_a)
service_1.setServiceParent(application)

factory_b = MyOtherFactory()
service_2 = internet.TCPServer(LPORT_2, factory_b)
service_2.setServiceParent(application)

それでは、service_1 から受信したデータを service_2 に送信する方法は? service_2 は、service_1 から受信したデータからのエコー サーバーとしてのみ使用されます。

4

1 に答える 1

3

どちらのサービスも、実際にはデータを送受信しません。すべてのサービスが行うのは、起動とシャットダウンの管理です。

ファクトリが実際にデータを送受信することもありません。ファクトリが行うことは、接続を処理するためのプロトコルを作成することだけです。

しかし、ファクトリは存続期間が長く、プロトコルは一時的なものであるため、多くの場合、ファクトリは他のオブジェクト間のアクティビティを調整するオブジェクトとして機能します。

および/またはその逆factory_aを参照してください。factory_bこれらのファクトリによって作成されたプロトコルは、それぞれ他のファクトリへの参照を取得できます。

factory_a.factory_b = factory_b
factory_b.factory_a = factory_a

class FactoryAProtocol(Protocol):
    def foo(self):
        self.factory.factory_b

他のファクトリによって作成されたプロトコルにデータを取得する場合は、さらに一歩進める必要があります。Twisted のベース ファクトリ クラスは、作成したプロトコルを追跡しません。ただし、twisted.protocols.policies.WrappingFactoryそうです (または、工場の単純な追跡ロジックを自分で実装することもできます)。

factory_b作成したプロトコルのコレクションがあると...

class FactoryAProtocol(Protocol):
    def foo(self):
        self.factory.factory_b.those_protocols[7]

つまり、ある接続での入力を別の接続での出力にするにはどうすればよいですか?

于 2014-01-25T11:46:09.363 に答える