19

TwistedWebSocketsについてもう少し学ぶために取り組みたいアプリのアイデアがあります。以前に作成した IRC ボットを Web アプリケーションに統合することを考えていました。私が見る限り、それを機能させるには 3 つのリアクターが必要です。

  • プライマリ リアクター: Web サーバー (HTTP)。これは、平均的な twisted.web アプリケーションです。アクセスすると、IRC サーバー/チャネルを接続に POST できます。次に、Web サーバーは別のスレッドの別のリアクターと通信します。これは...
  • 二次リアクター: IRC ボット。これは、Twisted IRC クライアント プロトコルを介して実行される IRC ボットです。それはチャネルに参加し、何かが発せられるたびに、そのデータを受け取り、さらに別のスレッド上のさらに別のリアクターにプッシュします...
  • Tertiary Reactor : WebSocket サーバー (WS): WebSocket は通常の HTTP プロトコルを使用しないため、独自のサーバーが必要です (または、このような例を見るとそう思われます。IRC ボットがメッセージを受信すると、WebSocket に通知します)。そのメッセージを接続されたクライアントにプッシュするサーバー。

私の考えでは、これは理にかなっています。出来そうです。複数のリアクターが別々のスレッドで実行されている例はありますか、それとも現在の Twisted の化身では実行できないと私が想像したことですか?

リアクター数などを最小限に抑えるために行うことができる (または行う必要がある) アーキテクチャの変更はありますか?

助けてくれてありがとう。

4

2 に答える 2

20

幸運なことに、reactor の数を簡単に減らすことができます。具体的には 1 にします。

特定の Twisted プロセスでは、1 つのスレッドで 1 つのリアクターしか持つことができません。それ以上取ろうとしても、何もうまくいきません。

実際、リアクターの要点は、イベントの複数のソースを 1 つのスレッドに結合できるようにすることです。3 つの異なるポートで 3 つの異なるプロトコルをリッスンする場合、アプリケーションは次のようになります。

from twisted.internet import reactor
reactor.listenTCP(4321, FirstProtocolFactory())
reactor.listenTCP(5432, SecondProtocolFactory())
reactor.listenTCP(6543, ThirdProtocolFactory())
reactor.run()

もちろん、ファイルまたはプラグインを介してを使用している場合は、おそらくからオブジェクトlistenTCPを使用したいので、実際に自分で直接呼び出しているとは限りません。そして、あなたのためにそれをしているなら、あなたは自分自身に電話する必要はありません。ここで私が言いたいのは、どのような方法であれ、reactor に、反応することが期待されるすべてのイベント (リッスン サーバー、クライアント接続、時限イベント) をロードすると、それが発生するたびに反応するということです。(したがって、「リアクター」。)Servicetwisted.application.internettwistd.tactwistdreactor.run()twistd

FirstProtocolFactorySecondProtocolFactory、およびの特定の値についてはThirdProtocolFactory、pyfunc の回答のリンクを参照してください。

于 2010-11-03T10:25:57.703 に答える
5

いいえ、複数のリアクターは必要ないと思います。

必要なのは、マルチサービスマルチプロトコルアプリケーションです。これがツイストが本当に輝いているところです。

したがって、アプリケーションはWebサービス、IRC Botサービス、およびWebSocketサーバーを開始する必要があります。

ツイストアプリケーションサービスフレームワークを使用し、特にマルチサービスを開始します

IRCボットの実装とツイストIRCプロトコルのサポートを確認してください。

WebSocketおよびツイスト用

于 2010-11-03T04:05:53.133 に答える