From aae49a0baea333c3b240e716c590edd4a49227b1 Mon Sep 17 00:00:00 2001 From: Adam La Morre Date: Thu, 3 Feb 2022 20:31:32 -0800 Subject: [PATCH] working --- daphne/cli.py | 3 +++ daphne/http_protocol.py | 11 ++++++----- daphne/server.py | 1 + 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/daphne/cli.py b/daphne/cli.py index 812efda..f63b76f 100755 --- a/daphne/cli.py +++ b/daphne/cli.py @@ -154,6 +154,7 @@ class CommandLineInterface: help="The maximum number of requests a worker will process before restarting.", default=float('inf'), action="store", + type=int, ) self.parser.add_argument( "application", @@ -266,6 +267,7 @@ class CommandLineInterface: endpoints = sorted(args.socket_strings + endpoints) # Start the server logger.info("Starting server at {}".format(", ".join(endpoints))) + logger.info(args.max_requests) self.server = self.server_class( application=application, endpoints=endpoints, @@ -288,5 +290,6 @@ class CommandLineInterface: if args.proxy_headers else None, server_name=args.server_name, + max_requests=args.max_requests, ) self.server.run() diff --git a/daphne/http_protocol.py b/daphne/http_protocol.py index a38803d..a84f451 100755 --- a/daphne/http_protocol.py +++ b/daphne/http_protocol.py @@ -1,4 +1,5 @@ import logging +import sys import time import traceback from urllib.parse import unquote @@ -56,7 +57,6 @@ class WebRequest(http.Request): self.server = self.channel.factory.server self.application_queue = None self._response_started = False - self._complete_requests_counted = 0 self.server.protocol_connected(self) except Exception: logger.error(traceback.format_exc()) @@ -146,6 +146,11 @@ class WebRequest(http.Request): # Boring old HTTP. else: + # Count completed Request and check against Max Requests + self.server._complete_requests_counted += 1 + if self.server._complete_requests_counted > self.server.max_requests: + sys.exit(0) + # Sanitize and decode headers, potentially extracting root path self.clean_headers = [] self.root_path = self.server.root_path @@ -198,10 +203,6 @@ class WebRequest(http.Request): self.application_queue.put_nowait(payload) if not more_body: break - # Count completed Request and check against Max Requests - self._complete_requests_counted += 1 - if self._complete_requests_counted > self.server.max_requests: - self.server.close() except Exception: logger.error(traceback.format_exc()) diff --git a/daphne/server.py b/daphne/server.py index c724174..c001dfd 100755 --- a/daphne/server.py +++ b/daphne/server.py @@ -84,6 +84,7 @@ class Server: self.ready_callable = ready_callable self.server_name = server_name self.max_requests = max_requests + self._complete_requests_counted = 0 # Check our construction is actually sensible if not self.endpoints: logger.error("No endpoints. This server will not listen on anything.")