/
app.py
44 lines (34 loc) · 1.1 KB
/
app.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
import asyncio
import logging
import signal
import sys
import uvloop
asyncio.set_event_loop_policy(uvloop.EventLoopPolicy())
logging.getLogger('asyncio').setLevel(logging.CRITICAL)
class Protocol(asyncio.Protocol):
def connection_made(self, transport):
self.writer = transport
def data_received(self, data: bytes):
self.writer.write(b'HTTP/1.1 200 OK\r\n'
b'Content-Length: 27\r\n'
b'Content-Type: application/json\r\n'
b'\r\n'
b'{"message":"Hello, World!"}')
if __name__ == '__main__':
loop = asyncio.get_event_loop()
server = loop.create_server(Protocol, '127.0.0.1', 8000)
loop.create_task(server)
print('Serving on http://127.0.0.1:8000')
def shutdown(*args):
server.close()
print('\nServer stopped.')
sys.exit(0)
signal.signal(signal.SIGTERM, shutdown)
signal.signal(signal.SIGINT, shutdown)
try:
loop.run_forever()
except KeyboardInterrupt:
pass
finally:
server.close()
loop.close()