2012-07-27 37 views
0

我开始龙卷风HTTP服务器是这样的:当我添加`-k`时,为什么ApacheBench测试龙卷风会中止?

app = tornado.web.Application([ 
    (r'.*', MyRequestHandler), 
]) 

http_server = tornado.httpserver.HTTPServer(app, no_keep_alive=True) 
http_server.listen(port) 
ioloop = tornado.ioloop.IOLoop.instance() 

ioloop.start() 

我想则会忽略与头Connection: keep-alive请求,然后设置no_keep_aliveTrue

当我运行

ab -n 1000 -c 10 -k http://127.0.0.1:28000/ 

输出

Benchmarking 127.0.0.1 (be patient) 
apr_socket_recv: Connection reset by peer (104) 
Total of 11 requests completed 

当我删除-k,一切运作良好。

回答

1

如果短 - 因为apache基准测试打开连接一次。在你的情况下,你有10个连接 - 并且在第一次10个请求后所有连接都被杀死。

这是来自龙卷风的HTTPConnection完成请求的代码。

def _finish_request(self): 
    if self.no_keep_alive: 
     disconnect = True 
    else: 
     connection_header = self._request.headers.get("Connection") 
     if connection_header is not None: 
      connection_header = connection_header.lower() 
     if self._request.supports_http_1_1(): 
      disconnect = connection_header == "close" 
     elif ("Content-Length" in self._request.headers 
       or self._request.method in ("HEAD", "GET")): 
      disconnect = connection_header != "keep-alive" 
     else: 
      disconnect = True 
    self._request = None 
    self._request_finished = False 
    if disconnect: 
     self.stream.close() 
     return 
    self.stream.read_until(b("\r\n\r\n"), self._header_callback) 

你的错误:

apr_socket_recv: Connection reset by peer (104) 

我们可以猜测,你必须强制apache的基准,以打开新的连接,如果旧的连接关闭。我不确定你是否能够在这种情况下获得有代表性的结果。

+0

我用'self.set_header('Connection','close')'explicit.thx!来解决这个问题! – iMom0 2012-07-28 04:17:19