0

Python ソケット モジュールを使用して単純な Web プロキシを実装しています。クライアントの HTTP リクエストをサーバーに転送した後、次のメソッドを使用してレスポンスを読み取ります。

def _read_response(self):
    response = ''
    while True:
        (readable, _, error) = select.select([self.server], [], [self.server], 3)
        if error:
            break
        if readable:
            data = self.server.recv(BUFSIZE)
            if not data: break
            response += data
    return response

上記のコードはほとんどの場合うまくいくようですが、遅いです。この問題を次の行に絞り込みました。

data = self.server.recv(BUFSIZE)

受信するデータがなくなった場合 (data == '' の場合)、この呼び出しには 20 秒以上かかります。

http 応答を読み取る正しい方法は何ですか? また、recv() の呼び出しに時間がかかるのはなぜですか?

4

1 に答える 1

0

本文を読み取る前にcontent-lengthヘッダーを解析します。次に、サーバーからcontent-lengthバイトのみを読み取ります。

次の方法で、ソケットの非ブロック モードを設定できます。

socket.setblocking(flag)

またはソケット操作のタイムアウトを設定します。

socket.settimeout(value)
于 2012-09-03T14:49:53.410 に答える