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,))
其實這是我的項目,所以我不能使用任何庫。我將不得不使用套接字來做到這一點。另外,當我從客戶端收到請求時,我一次只收到一個HTTP GET請求。 – vedarthk 2012-03-23 15:26:37
發送完整消息後,您的客戶端必須在套接字上執行write shutdown操作,否則您的recv將繼續阻塞...還請注意,我沒有說您應該使用庫,您可以檢查*來源* – 2012-03-23 15:47:15
行。很抱歉對於這個誤會。 – vedarthk 2012-03-23 16:40:25