我已经了解了一个应用程序,我想继续学习Twisted和WebSockets。我正在考虑将以前编写的IRC Bot集成到Web应用程序中。据我所知,我需要三个反应器才能使其发挥作用:
在我看来,这是有道理的。似乎有可能。有没有人有任何在不同线程中运行的多个反应堆的例子,或者这是我想象的那些在扭曲的当前版本中无法完成的事情。
是否可以(或应该)进行任何体系结构更改以最小化反应器数量等?
感谢您的帮助。
答案 0 :(得分:19)
幸运的是,很容易减少反应堆的数量,特别是1:
在任何给定的Twisted过程中,您只能在单个线程中拥有单个反应器。如果你试图拥有更多,那么什么都不会有效。
实际上,反应堆的重点是促进将多个事件源组合成一个线程。如果您想使用3种不同的协议监听3个不同的端口,您的应用程序可能如下所示:
from twisted.internet import reactor
reactor.listenTCP(4321, FirstProtocolFactory())
reactor.listenTCP(5432, SecondProtocolFactory())
reactor.listenTCP(6543, ThirdProtocolFactory())
reactor.run()
当然,您实际上可能不会直接自己调用listenTCP
,因为如果您使用Service
,可能需要使用twisted.application.internet
中的twistd
个对象,一个.tac
文件或twistd
插件。如果reactor.run()
正在为您执行此操作,则您无需亲自致电twistd
。我的观点是,通过任何方式,您可以使用您希望它作出反应的所有事件来加载反应堆 - 侦听服务器,客户端连接,定时事件 - 并且它将在每个事件发生时作出反应。 (因此,“反应堆”。)
有关FirstProtocolFactory
,SecondProtocolFactory
和ThirdProtocolFactory
应具体的具体值,请参阅pyfunc答案中的链接。
答案 1 :(得分:5)
不,我认为你不需要多个反应堆。
您需要的是多服务多协议应用程序。这就是Twisted真正闪耀的地方。
因此,您的应用程序应该启动Web服务,IRC Bot服务和WebSocket服务器。
使用扭曲的应用程序服务框架,特别是启动多服务
查看IRC bot实现和扭曲的IRC协议支持:
和websocket and twisted