我有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
,我可以从客户端成功连接到服务器。
那么,有什么区别?对我来说,这两个例子是相同的。为什么第一个示例不起作用,第二个为什么起作用?如何解决我的第一个示例?