【问题标题】:How to communicate between services?服务之间如何通信?
【发布时间】:2014-02-16 03:15:57
【问题描述】:

我有两台服务器:

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 接收到的数据的回显服务器

【问题讨论】:

    标签: twisted twisted.internet


    【解决方案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?

    【讨论】:

      猜你喜欢
      • 2015-02-14
      • 1970-01-01
      • 2016-06-10
      • 2013-04-10
      • 2018-08-23
      • 1970-01-01
      • 2012-02-16
      • 2019-11-17
      相关资源
      最近更新 更多