2

したがって、読み取りと書き込みが完全に非同期である単純な通信プロトコルを実装したいと考えています。つまり、クライアントが何らかのデータを送信すると、サーバーが応答する場合と応答しない場合があります。reader.read()したがって、少なくとも何かが返されるまでブロックされるため、単に呼び出すことはできません。そして、それまでの間に送信するものがもっとあるかもしれません。

では、読者が読むべきものを持っているかどうかを確認する方法はありますか? (特にストリーム バージョンについて話していることに注意してください。プロトコル バージョンには読み取りと書き込み用の個別のハンドラーがあり、この問題の影響を受けないことを十分に認識しています)

4

1 に答える 1

2

リーダーに着信データがあるかどうかを尋ねる方法はありません。

asyncio.Taskループ内の asyncio ストリーム リーダーからデータを読み取るために作成すると思います。非同期でデータを書き込む必要がある場合StreamWriter.write()は、発信データを持つ任意のタスクから自由に呼び出してください。

プロトコルを直接使用することは強くお勧めしません。これらはフロー制御に役立つ低レベルの抽象化ですが、アプリケーション コードには高レベルのストリームを使用する方が適しています。

于 2014-11-05T17:19:25.837 に答える