我正在使用 python 套接字模块实现一个简单的网络代理。将客户端的 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() 需要这么长时间?