0

我正在使用 python 中的一个简单代理,它GET从浏览器获取 HTTP 请求,查询正确的网站并将数据(html、css、照片)返回给客户端。我让它工作了,但是从外部 Web 服务器读回数据并将其发送回客户端需要花费大量时间。以下是(我认为是)相关代码:

    tempSocket.send(requestToWebpage)

    tempList = []

    while 1:
           print "waiting for data from website..."
           data =  tempSocket.recv(bufferSize)
           if not data:
                break
           else:
                tempList.append(data)

    tempResponse = ''.join(tempList)
    print "closing temp socket..."
    tempSocket.close()

    splitResponse = tempResponse.partition("\r\n")

    response = splitResponse[0] + "\r\n" + "Proxy-connection: close\r\n" + splitResponse[2]

    print "sending results back..."
    newConnection.send(response)
    newConnection.close()

代理在我自己的机器上运行(就像客户端浏览器一样),它是 Windows 7 64 位。我有一个体面的无线连接到互联网。目前,接收每个 GET 请求的结果并将其传输到客户端需要几分钟以上的时间。通过查看打印语句,我注意到大部分时间似乎都花在了 while 循环中(尤其是通过它的最后一个循环),但其他打印消息的出现时间也比看起来要长。

关于正在发生的事情和提高速度的建议有什么想法吗?

4

1 回答 1

1

马库斯的评论可能是正确的。远程服务器未关闭其连接。

您可能会要求这种行为,甚至可能没有意识到。对服务器的请求是什么,即发送的是requestToWebpage什么?你在设置 Connection: Keep-Alive标题吗?

如果您在请求中使用 HTTP 1.1,则 Keep-Alive 是默认设置。

如果不是因为 Keep-Alive,您可能需要从回复中获取 Content-Length,然后您就会知道要读取多少字节。

于 2012-09-18T03:21:45.697 回答