1

Python 3.4/Asyncio では、StreamReader/Writer を使用しています。

クライアントの切断を検出する一般的な方法は、クライアントから読み取ることであり、そこに何もない場合、クライアントは切断されているようです。

while True:
    data = (yield from asyncio.wait_for(client_reader.readline(),
                                   timeout=1.0))
    if not data: #client disconnected
        break

ただし、クライアントヘッダーから読み取る行がすぐに不足し(ループごとに次の行に移動します)、クライアントから追加の行が送信されない場合(私の場合、クライアントはリッスンするだけで送信していません)、タイムアウト。

私がやりたいのは、ヘッダーの最初の行だけを何度も読むことです..または、最初の行の最初の文字だけを読むこともできます.最初。

このタスクを達成するための最良/最もエレガントな方法は何ですか? 3.4/非同期/ストリームリーダー/ライター。(クライアント切断の検出)

4

1 に答える 1

0

同様の問題がありました。私にとってうまくいった方法は、最初に EOF をチェックしてから、true の場合は ConnectionError 例外を発生させることでした。したがって、コードに次を追加します。

while True:

    try:
        if client_reader.at_eof():
            raise ConnectionError

        data = (yield from asyncio.wait_for(client_reader.readline(),
                                       timeout=1.0))
        if not data: #client disconnected
            break

    except ConnectionError:
        break

    except:
        break # This is here to catch things like the asyncio futures timeout exception

それが役立つことを願っています。誰かがより良い方法を持っているなら、私は興味があります。

于 2015-05-09T23:29:14.733 に答える