eider.py 文件源码

python
阅读 23 收藏 0 点赞 0 评论 0

项目:eider-py 作者: eider-rpc 项目源码 文件源码
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()
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号