我用一种HTTP服务器制作了一个简单的python脚本:
import SocketServer
response = b'HTTP/1.0 200 OK\r\nDate: Mon, 1 Jan 1996 01:01:01 GMT\r\n'
response += b'Content-Type: text/plain\r\nContent-Length: 14\r\n\r\n'
response += b'Hello, world!\n'
class MyTCPHandler(SocketServer.StreamRequestHandler):
def handle(self):
while True:
line = self.rfile.readline().strip()
print "{} {}:{} wrote: {}".format(self.connection, self.client_address[0], self.client_address[1], line)
if not line:
self.wfile.write(response)
print 'Sent hello world'
#break
if __name__ == "__main__":
HOST, PORT = "localhost", 9999
server = SocketServer.TCPServer((HOST, PORT), MyTCPHandler)
server.serve_forever()
现在我启动ab,通过1个连接执行1个请求: ab-n1-c1http://127.0.0.1:9999/
当我在响应后不关闭连接,期望客户机在收到我的响应后关闭其端部的套接字时,会发生一些奇怪的事情。在
Ab始终通过同一个连接重复发送相同的请求:
^{pr2}$。。。它通过同一个插座在内部重复。在
我尝试从套接字读取原始数据:
import SocketServer
class MyTCPHandler2(SocketServer.BaseRequestHandler):
def handle(self):
while True:
self.data = self.request.recv(1024).strip()
print "{} wrote:".format(self.client_address[0])
print self.data
if __name__ == "__main__":
HOST, PORT = "localhost", 9999
server = SocketServer.TCPServer((HOST, PORT), MyTCPHandler2)
server.serve_forever()
Ab甚至都不想等待响应,它在同一个连接中处理大量的请求。在
为什么?是不是我丢失了在HTTP 1.0中重复使用的某种连接?我是否应该始终关闭连接,而不考虑第一对数据之后的\r\n\r\n数据?在
尝试重现相同行为的httperf参数是什么?在
目前没有回答
相关问题 更多 >
编程相关推荐