2012-07-27 20 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