これを行う方法をほとんど理解しているようです。あなたは興味があるかもしれませんがtwisted.internet.fdesc.readFromFD、それはほんの数行の長さであり、特に複雑なことは何もしていません(ただし、維持する必要のない数行です)。それとは別に、この場合はI / O監視を行う必要があります。これは、通常のファイル記述子がselect / poll / epollでサポートされていないためです(必要なものではなく、常に準備ができていると報告されます)。
Twisted( http://twistedmatrix.com/trac/ticket/972 )でinotifyをサポートするための作業がいくつか行われていますが、これはまだ完了していないため、(支援したい場合を除いて)直接役立つことはありません。仕上げてから使用してください)。時間ベースのポーリングを使用していると仮定すると、そのコードはシステムが提供する準備API(つまり、select / poll / epoll)を使用してイベントをトリガーすることに焦点を当てているため、reactorにあるものの多くはあまり役に立ちません。 。
IReactorFDSetただし、パイプの場合は、のメソッドを使用してその恩恵を受けることができるはずですaddReader。
時間ベースのポーリングトランスポートは、実装することでメリットが得られる可能性があります。ただし、のようなトランスポートをITransportどのように実装するかはわかりません。コードの再利用が簡単に なるため、トランスポートにインターフェイスを介してデータを配信させることで、間違いなくメリットが得られます。まさにあなたがあなたの読者からデータを渡したい方法です(私はあなたの輸送と同じだと思いますね?)。これは、トランスポートではない他のオブジェクトで呼び出すメソッドであるため、で定義されていません。writetail -fIProtocolIProtocol.dataReceivedITransport
reactor.connectWithおそらくあなたに何も買わないでしょう。あなたが言うように、それはあまり抽象化ではありません。それはもっと間違いだと思います。:)
メソッドをリアクターに直接追加できないことについてはあまり心配しないでください。リアクターをパラメーターとして受け入れるフリー関数も同様に使いやすいです。
シャットダウンコールバックの場合、addReader実際にはほとんどの方法でそこに到達するはずです。シャットダウン時に原子炉内のすべてのリーダーがそれをconnectionLost呼び出します(の一部IFileDescriptor)。これを実装して、ファイルとプロトコルをクリーンアップする必要があります。