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

时间:2017-03-22 04:28:05

标签: python websocket python-asyncio

这在this question的回答中提出,但我想特别提出一个新问题。

如何使用上下文管理器连接到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方法。

1 个答案:

答案 0 :(得分:2)

使用:

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()

请注意,上下文管理员通常会帮助您:您可能希望更改代码以使用它们而不是解决它们。