Ниже приведен код, который прослушивает порт для HTTP-запросов и отправляет пакет запроса на сервер, работающий на порту 80, получает ответ и отправляет данные обратно клиенту. Теперь все выполняется нормально, но следующая строка кода:
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, ))