Python3和asyncio:如何将websocket服务器实现为asyncio实例?

Python3和asyncio:如何将websocket服务器实现为asyncio实例?,python,python-3.x,websocket,python-3.5,python-asyncio,Python,Python 3.x,Websocket,Python 3.5,Python Asyncio,我有多个服务器,每个服务器都是由asyncio.start\u服务器返回的实例。我需要我的web_服务器与WebSocket一起工作,以便能够使用javascript客户端获取数据。正如我所看到的,asyncio不提供WebSocket,只提供tcp套接字。也许我错过了什么?我想实现可以在asyncio.gather中使用的websocket服务器,如下所示: loop = asyncio.get_event_loop() login_server = LoginServer.

我有多个服务器,每个服务器都是由asyncio.start\u服务器返回的实例。我需要我的web_服务器与WebSocket一起工作,以便能够使用javascript客户端获取数据。正如我所看到的,asyncio不提供WebSocket,只提供tcp套接字。也许我错过了什么?我想实现可以在asyncio.gather中使用的websocket服务器,如下所示:

    loop = asyncio.get_event_loop()

    login_server = LoginServer.create()
    world_server = WorldServer.create()
    web_server   = WebServer.create()

    loop.run_until_complete(
        asyncio.gather(
            login_server.get_instance(),
            world_server.get_instance(),
            web_server.get_instance()
        )
    )

    try:
        loop.run_forever()
    except KeyboardInterrupt:
        pass

    loop.close()

我不想使用aiohttp,因为如果在上面的代码中使用like,aiohttp只会阻塞另一个任务。我需要的东西,将是非阻塞,并将有权访问其他服务器(登录和世界)的数据。使用asyncio可以吗?asyncio是否提供类似WebSocket的功能?如何实现websocket服务器以便在asyncio.gather中使用?

最后,我实现了WebServer以便在另一个异步线程中使用。代码(Web服务器代码):

以及如何运行:

executor = ProcessPoolExecutor()

loop.run_until_complete(
    asyncio.gather(
        login_server.get_instance(),
        world_server.get_instance(),
        loop.run_in_executor(executor, WebServer.run)
    )
)

运行
web.run_app
run_in_executor
是一种反模式,因为它(不必要地)运行两个事件循环。您可以改用
AppRunner
API,如的第一个代码段所示。
executor = ProcessPoolExecutor()

loop.run_until_complete(
    asyncio.gather(
        login_server.get_instance(),
        world_server.get_instance(),
        loop.run_in_executor(executor, WebServer.run)
    )
)