0

我像这样启动一个龙卷风 http 服务器:

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,一切正常。

4

1 回答 1

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 benchmark 打开新连接。我不确定在这种情况下您是否能够获得具有代表性的结果。

于 2012-07-27T09:39:16.160 回答