0

私はGET、ブラウザからHTTPリクエストを受け取り、正しいWebサイトにクエリを実行し、データ(html、css、photos)をクライアントに返すPythonの単純なプロキシに取り組んでいます。私はそれを機能させていますが、外部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ヘッダーを設定しています か?

リクエストでHTTP1.1を使用している場合、Keep-Aliveがデフォルトです。

Keep-Aliveが原因ではない場合は、応答からContent-Lengthを取得する必要があります。そうすれば、読み取るバイト数がわかります。

于 2012-09-18T03:21:45.697 に答える