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 回答