-
Notifications
You must be signed in to change notification settings - Fork 25
/
Copy path01_server.py
48 lines (40 loc) · 1.61 KB
/
01_server.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
from concurrent.futures import ThreadPoolExecutor
from http.server import SimpleHTTPRequestHandler
import socketserver
import os
import mimetypes
mimetypes.add_type('application/javascript', '.js')
class CORSRequestHandler(SimpleHTTPRequestHandler):
protocol_version = 'HTTP/1.1'
def end_headers(self):
self.send_header('Access-Control-Allow-Origin', '*')
self.send_header('Access-Control-Allow-Methods', 'GET')
self.send_header('Cache-Control', 'no-store, no-cache, must-revalidate')
self.send_header('Connection', 'keep-alive')
self.send_header('Service-Worker-Allowed', '/')
return super(CORSRequestHandler, self).end_headers()
def do_GET(self):
self.directory = os.getcwd()
return SimpleHTTPRequestHandler.do_GET(self)
def handle_one_request(self):
try:
super().handle_one_request()
except ConnectionAbortedError:
pass
class ThreadedTCPServer(socketserver.ThreadingMixIn, socketserver.TCPServer):
daemon_threads = True
allow_reuse_address = True
request_queue_size = 500
timeout = 60
if __name__ == '__main__':
PORT = 8000
ADDRESS = ""
socketserver.TCPServer.allow_reuse_address = True
with ThreadedTCPServer((ADDRESS, PORT), CORSRequestHandler) as httpd:
with ThreadPoolExecutor(max_workers=500) as executor:
print(f"Server running at http://localhost:{PORT}")
try:
httpd.serve_forever()
except KeyboardInterrupt:
print("\nShutting down server...")
httpd.shutdown()