如何在上下文管理器之外打开 websocket 连接?

How can I open a websocket connection outside of a context manager?

这个是在 的回答中提出的,但我想专门问一个新的。

如何在不使用上下文管理器的情况下连接到 websocket ?当实际调用需要使用它的协程时,我遇到了 websocket 关闭的问题。

ws = websockets.connect('ws://192.168.1.32:8765')
print(ws)

给出 <websockets.py35.client.Connect object at 0x0076CAD0> 而不是我使用上下文管理器获得的 <websockets.client.WebSocketClientProtocol object at 0x04A91A70>Connect 对象没有 sendrecv 方法。

使用:

ws = await websockets.connect('ws://192.168.1.32:8765')

您可以查看 Client 的源代码,了解它如何与异步上下文管理器一起工作:

async def __aenter__(self):
    self.websocket = await self
    return self.websocket

关闭连接使用:

await ws.close()

请记住上下文管理器通常可以帮助您:您可能希望更改代码以使用它们而不是绕过它们。