2

私は、リアクターが複数のサービスでどのように機能するかを学ぶのに役立つ、基本的なツイストアプリケーションに取り組んでいます。スクリプトに実行させたい基本的な概要は次のとおりです。

私のスクリプトは、WebサーバーとIRCクライアントの両方になります。Webサーバーにリクエストが送信されるたびに、スクリプトはIRCにメッセージを送信する必要があります。

IRCクライアントが機能し、twisted.webサーバーが機能しており、1つのスクリプトで同時に実行できます。これらを相互に作用させようとすると、問題が発生します。サーバー/クライアントを開始する方法は次のとおりです。

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()

上記のコードを使用すると、クライアントの2つの部分が問題なく同時に実行されます。しかし、HTTPリクエストに応じてIRCクライアントにサーバーにメッセージを送信させようとすると、IRCBotFactoryでリアクターを開始し、Twistedに実際のボットの初期化を処理させたため、実際にはIRCBotインスタンスを参照していないことに気付きました。物体。

Twistedでファクトリのすべての子インスタンスを取得する方法はありますか、またはIRCクライアントを開始する別の方法がありますか(おそらくファクトリをバイパスしてIRCBotインスタンスを使用するだけです)?

4

1 に答える 1

1

Twisted FAQエントリエントリの1つで、このような問題について説明しています。サイトは工場であり、同様のソリューションをケースに簡単に適用できるはずです。

于 2010-11-08T05:41:28.897 に答える