如何在服务之间进行通信?

时间:2014-01-24 23:26:22

标签: twisted twisted.internet

我有两台服务器:

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

收到的数据的echo服务器

1 个答案:

答案 0 :(得分: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]

换句话说,How do I make input on one connection result in output on another?