我有两个应用程序,用twisted 框架编写,例如一个使用twisted.web,另一个使用twisted.protocols.*,而不是web。如何将它们“合并”为一个,有效地为两个应用程序共享一个反应器?
这些任务的最佳实践是什么?实际上我需要连接 SIPSimpleApp 和 TornadoWeb。他们都可以使用双绞线电抗器。
我有两个应用程序,用twisted 框架编写,例如一个使用twisted.web,另一个使用twisted.protocols.*,而不是web。如何将它们“合并”为一个,有效地为两个应用程序共享一个反应器?
这些任务的最佳实践是什么?实际上我需要连接 SIPSimpleApp 和 TornadoWeb。他们都可以使用双绞线电抗器。
在一个扭曲的应用程序中,您可以安装多个协议工厂客户端实例
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系统,以及服务集合,文档在这里
到目前为止,我发现,如果你合并两个扭曲的应用程序,你应该从其中一个中删除 reactor.run(),最后只留下一个 reactor.run()。并确保两个应用程序的 twisted.reactor 实现相同。欢迎更多评论。