Limit number of parallel connections

This commit is contained in:
Unrud
2016-06-10 14:36:44 +02:00
parent e438d9fd4b
commit 83ea9da2b4
4 changed files with 22 additions and 2 deletions

View File

@@ -29,9 +29,11 @@ should have been included in this package.
import os
import pprint
import base64
import contextlib
import socket
import socketserver
import ssl
import threading
import wsgiref.simple_server
import re
import zlib
@@ -57,6 +59,7 @@ class HTTPServer(wsgiref.simple_server.WSGIServer):
# These class attributes must be set before creating instance
client_timeout = None
max_connections = None
def __init__(self, address, handler, bind_and_activate=True):
"""Create server."""
@@ -76,6 +79,13 @@ class HTTPServer(wsgiref.simple_server.WSGIServer):
self.server_bind()
self.server_activate()
if self.max_connections:
self.connections_guard = threading.BoundedSemaphore(
self.max_connections)
else:
# use dummy context manager
self.connections_guard = contextlib.suppress()
def get_request(self):
# Set timeout for client
_socket, address = super().get_request()
@@ -106,11 +116,15 @@ class HTTPSServer(HTTPServer):
class ThreadedHTTPServer(socketserver.ThreadingMixIn, HTTPServer):
pass
def process_request_thread(self, request, client_address):
with self.connections_guard:
return super().process_request_thread(request, client_address)
class ThreadedHTTPSServer(socketserver.ThreadingMixIn, HTTPSServer):
pass
def process_request_thread(self, request, client_address):
with self.connections_guard:
return super().process_request_thread(request, client_address)
class RequestHandler(wsgiref.simple_server.WSGIRequestHandler):