4

fifo ファイル (主に 1 つのライナー) からメッセージを読み取り、それらを irc チャネルに送信して連絡先をジャバーする、ある種のマルチ プロトコル ボット (jabber/irc) を作成しようとしています。これまでのところ、jabber と irc に接続するための 2 つのファクトリを作成できましたが、それらは機能しているようです。

ただし、fifo ファイルの読み取りに問題があります。データを取得するために、リアクター ループの外側でループ (ファイルを開く、行を読み取る、ファイルを閉じる、ファイルを開くなど) で読み取る方法がわかりません。送信する必要があり、そのデータを両方のプロトコルで送信するためのリアクター ループに取得します。私はそれを最善の方法で行う方法についての情報を探していましたが、暗闇の中で完全に失われました. 任意の提案/ヘルプをいただければ幸いです。

前もって感謝します!

4

2 に答える 2

3

ソケットのようにreactorをブロックすることなく、ファイル記述子の読み取り/書き込みを行うことができます。ちなみに、ソケットはファイル記述子を使用しませんか?

twisted.internet.interfaces.IReadDescriptorあなたの場合、を使用してreactorを実装および追加するクラスを作成しますtwisted.internet.interfaces.IReactorFDSet.addReaderIReadDescriptor実装の例については、を参照してtwisted.internet.tcp.Connectionください。

自分でやったことがないので、これ以上具体的にすることはできませんが、これが出発点になることを願っています。

于 2010-03-19T16:39:05.117 に答える
1

fifo が問題です。代わりにソケットから読み取ります。これは、Twisted のイベント駆動型モデルによりよく適合します。原子炉の制御外で何かをしようとするのは、通常、間違ったアプローチです。

---- fifo は外部制約であり、回避できないというフィードバックに基づいて更新 ----

OK、中心的な問題は、FIFO への読み取り呼び出しをブロックする Twisted アプリのメイン (かつ唯一の) スレッドにコードを記述できないことです。読み取るものがないと、アプリ全体が停止します。したがって、FIFO を非同期的に読み取るか、それを読み取る別のスレッドを作成するか、アプリを 2 つに分割するかのいずれかを検討しています。

最後のオプションは最も単純です - Twisted アプリをソケットでリッスンするように変更し、単純なループで実行される別の小さな「フォワーダー」アプリを作成し、fifo を読み取り、受信したものすべてをソケットに書き込みます。

于 2010-03-19T10:25:19.227 に答える