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

标签 python websocket python-asyncio

这是在 this question 的回答中提出的,但我想专门向一位新人询问此事。

如何在不使用上下文管理器的情况下连接到 websocket?当实际调用需要使用 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()

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

关于python - 如何在上下文管理器之外打开 websocket 连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42942754/

相关文章:

nginx - 如何在Kubernetes中为多个服务设置粘性 session ?

python - 如何在 Tree 方法中正确放置 return False 语句?

python - 如何使用 docutils 向 HTML 文档的标题部分添加内容

html - Apple IOS 和缺乏 HTML5 WebSockets 支持

ios - 网络套接字 : Starscream "masked and rsv data is not currently supported"

python-3.x - 为什么没有call_at_threadsafe和call_later_threadsafe?

python - 为什么在 aiohttp 中使用显式循环参数?

python-3.x - 监控异步事件循环

python - 如何在 python 中对整数占位符执行操作?

python - matplotlib:一张图上的多个图