2014-01-24 77 views
1

我有两台服务器:如何沟通服务?

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仅作为从服务接收到的数据的回显服务器_1

回答

1

这两种服务都不实际发送或接收任何数据。所有服务都是管理启动和关闭。

工厂也没有实际发送或接收任何数据。所有工厂都在创建协议来处理连接。

但是由于工厂寿命长且协议是短暂的,工厂通常可以作为一个对象来协调其他对象之间的活动。

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?