Python3:仅在起始文件中初始化时,websocket才能正确运行

时间:2019-07-15 21:33:00

标签: python python-3.x websocket python-asyncio asyncio

我有Python websocket服务器,其代码为:

class WebsocketServer(object):

    def __init__(self, host, port):
        self.host = host
        self.port = port
        self.instance = websockets.serve(self.handle_connection, host, port)

    async def handle_connection(self, websocket, path):
        # some actions

    async def get_instance(self):
        Logger.warning('test')
        return self.instance

    @staticmethod
    def create():
        Logger.info('[Websocket Server]: init')
        return WebsocketServer(
            Config.WebsocketServer.Connection.host,
            Config.WebsocketServer.Connection.port
        )

我使用asyncio.gather运行此服务器:

if __name__ == '__main__':
    loop = asyncio.get_event_loop()

    websocket_server = WebsocketServer.create()

    loop.run_until_complete(
        asyncio.gather(
            # ... some actions
            websocket_server.get_instance(),
        )
    )


    try:
        loop.run_forever()
    except KeyboardInterrupt:
        pass

    loop.close()

我使用我的React客户端连接到该服务器。当像上面的示例那样实例化服务器时,我无法通过客户端连接到服务器并得到错误:

  

与'ws://127.0.0.1:9001 /'的WebSocket连接失败:连接建立错误:net :: ERR_CONNECTION_REFUSED

但是当我用next修复端点的代码时:

if __name__ == '__main__':
    # ...
    websocket_server = websockets.serve(handler, host, port)

并将其传递给asyncio.gather,我可以从客户端成功连接到服务器。

那么,有什么区别?对我来说,这两个例子是相同的。为什么第一个示例不起作用,第二个为什么起作用?如何解决我的第一个示例?

0 个答案:

没有答案