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_aliveしてリクエストを取り込みたいのですがTrue

私が走るとき

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ベンチマークに新しい接続を開くように強制する必要があります。この場合、代表的な結果が得られるかどうかはわかりません。

于 2012-07-27T09:39:16.160 に答える