【问题标题】:How to "merge" two Python twisted applications?如何“合并”两个 Python 扭曲的应用程序?
【发布时间】:2013-12-05 15:28:29
【问题描述】:
我有两个应用程序,用twisted 框架编写,例如一个使用twisted.web,另一个使用twisted.protocols.*,而不是web。如何将它们“合并”为一个,有效地为两个应用共享一个反应器?
这些任务的最佳做法是什么?实际上我需要连接 SIPSimpleApp 和 TornadoWeb。他们都可以使用双绞线。
【问题讨论】:
标签:
python
asynchronous
twisted
tornado
reactor
【解决方案1】:
在扭曲的应用程序中,您可以安装多个协议工厂客户端实例
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系统,以及服务合集,文档here
【解决方案2】:
到目前为止,我发现,如果合并两个扭曲的应用程序,则应该从其中一个中删除 reactor.run(),最后只留下一个 reactor.run()。并确保两个应用程序的 twisted.reactor 实现相同。
欢迎更多cmets。