0
以下は、HTTP要求のためにポートで待機し、要求パケットをポート80で実行されているサーバーに送信するコードです。データをクライアントに返します。今、すべてが正常に実行されるが、次のコード行: sock.recv()はPythonコードで実行するのに時間がかかりすぎています
data = req_soc.recv(1024)
は、実行するためにあまりにも多くの時間を取っていると私は、それは/最後のパケットを受信したために起こっているときに実行するために長い時間がかかることを観察しました。私も
select.select()
を使って同じコードを試しましたが、結果は同じです。クライアントと実際のHTTPサーバーから来るデータ(未処理)を処理したいので、ソケットを使用する以外に選択肢はありません。
import socket
import thread
def handle_client(client):
data = client.recv(512)
request = ''
request += data
print data
print '-'*20
spl = data.split("\r\n")
print spl[0]
print spl[1]
if len(request):
req_soc = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
req_soc.connect(('localhost', 80))
req_soc.send(request)
response = ''
data = req_soc.recv(1024)
while data:
response += data
print 1
data = req_soc.recv(1024)
req_soc.close()
print response
if len(response):
client.send(response)
client.close()
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(('localhost', 4422))
server.listen(5)
print("Server is running...\n")
MSGLEN = 1024
while 1:
client, address = server.accept()
thread.start_new_thread(handle_client, (client,))
これは私のプロジェクトなので、私はライブラリを使用できません。私はソケットを使ってそれをする必要があります。また、クライアントからリクエストを受け取ったときに、一度に1つのHTTP GETリクエストを取得しています。 – vedarthk
あなたのクライアントは、メッセージ全体を送信した後にソケット上の書き込みシャットダウンを行う必要があります。そうでなければ、あなたのrecvはブロックされ続けます...私はあなたが*ライブラリ*を使うべきだと言っていないことに注意してください。ソース* –
OK。誤解をおかけして申し訳ありません。 – vedarthk