2014-01-24 112 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?