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