我正在开发一个基本的 Twisted 应用程序,以帮助我了解反应器如何与多个服务一起工作。我希望我的脚本执行的基本大纲如下:
我的脚本既是 Web 服务器又是 IRC 客户端。每次向 Web 服务器发出请求时,脚本都应该在 IRC 上显示一条消息。
我有一个 IRC 客户端工作,一个 twisted.web 服务器工作,并且可以让它们在一个脚本中同时运行。当我试图让它们相互交互时,就会出现问题。这是我启动服务器/客户端的方式:
import sys
from twisted.words.protocols import irc
from twisted.web import server, resource
from twisted.internet import protocol, reactor
# Define my custom IRC Client, ClientFactory, and Web Application
chan = sys.argv[1]
site = server.Site(Home())
reactor.listenTCP(8080, site)
reactor.connectTCP('irc.freenote.net', 6667, IRCBotFactory(chan))
reactor.run()
使用上面的代码,我的客户端的两个部分同时运行没有问题。然而,当试图让 IRC 客户端根据 HTTP 请求向服务器发送消息时,我意识到我实际上并没有引用 IRCBot 实例,因为我使用 IRCBotFactory 启动反应器并让 Twisted 处理实际机器人的初始化目的。
有没有办法在 Twisted 中获取工厂的所有子实例,或者我有另一种方法来启动 IRC 客户端(可能绕过工厂并简单地使用 IRCBot 实例)?