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() の呼び出しに時間がかかるのはなぜですか?