2010-11-08 26 views
2

我正在研究一个基本的Twisted应用程序,以帮助我了解反应堆如何与多种服务一起工作。我想要脚本的基本概要如下:访问在Twisted中从ClientFactory创建的所有对象?

我的脚本既是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处理实际bot的初始化目的。

有没有办法让Twisted中的工厂的所有子实例,还是有另一种方式让我启动IRC客户端(也许绕过Factory并简单地使用IRCBot实例)?

+0

当你说'发送消息'时,你的意思是连接到web服务器实例就足够了,还是需要访问实际的服务器对象?如果只是前者,你不能通过客户端通过localhost连接到它吗? – si28719e 2010-11-08 04:19:43

+0

当浏览器连接到我的HTTP服务器时,服务器需要告诉我的所有IRC客户端将消息发送到它们当前连接的IRC服务器。 – 2010-11-08 04:25:53

回答

1

Twisted FAQ entries条目之一讨论了这样一个问题。请记住,Site是一家工厂,应用相似的解决方案很容易。

相关问题