def serve(port=8080, loop=None, handle_signals=True, **kwargs):
if loop is None:
loop = get_event_loop()
conns = []
@coroutine
def handle(request):
ws = WebSocketResponse()
yield from ws.prepare(request)
conn = Connection(ws, loop, **kwargs)
conns.append(conn)
try:
yield from conn.wait_closed()
finally:
conns.remove(conn)
return ws
def on_shutdown(app):
for conn in conns:
conn.close()
aiohttp_ver = tuple(map(int, aiohttp_version.split('.')))
app = Application(**({} if aiohttp_ver >= (2,) else {'loop': loop}))
app.router.add_route('GET', '/', handle)
app.on_shutdown.append(on_shutdown)
busywait = PeriodicCall(lambda: None, 1, loop) # see comment for BlockingConnection.busywait
try:
kwargs_run = {}
if aiohttp_ver >= (2,):
kwargs_run['loop'] = loop
if aiohttp_ver >= (2, 2):
kwargs_run['handle_signals'] = handle_signals
run_app(app, port=port, **kwargs_run)
finally:
busywait.cancel()
评论列表
文章目录