2

我有两个应用程序,用twisted 框架编写,例如一个使用twisted.web,另一个使用twisted.protocols.*,而不是web。如何将它们“合并”为一个,有效地为两个应用程序共享一个反应器?

这些任务的最佳实践是什么?实际上我需要连接 SIPSimpleApp 和 TornadoWeb。他们都可以使用双绞线电抗器。

4

2 回答 2

3

在一个扭曲的应用程序中,您可以安装多个协议工厂客户端实例

Twisted 将处理所有应用程序的连接。

因此,您可以根据需要实例化为服务器/客户端,而且,您是对的,reactor.run() 必须只启动一次。

因此,您可以导入您的协议并运行反应器循环。基于最简单的回声示例的示例:

from twisted.internet import protocol, reactor

class Echo(protocol.Protocol):
    def dataReceived(self, data):
        self.transport.write(data)

class EchoFactory(protocol.Factory):
    def buildProtocol(self, addr):
        return Echo()

class Echo2(protocol.Protocol):
    def dataReceived(self, data):
        self.transport.write(data+" From 2")

class EchoFactory2(protocol.Factory):
    def buildProtocol(self, addr):
        return Echo2()

reactor.listenTCP(1234, EchoFactory())

reactor.listenTCP(1235, EchoFactory2())
reactor.run()

那是工作

你也可以使用twistd系统,以及服务集合,文档在这里

于 2013-12-10T13:22:17.733 回答
0

到目前为止,我发现,如果你合并两个扭曲的应用程序,你应该从其中一个中删除 reactor.run(),最后只留下一个 reactor.run()。并确保两个应用程序的 twisted.reactor 实现相同。欢迎更多评论。

于 2013-12-06T16:36:18.007 回答