如何在上下文管理器之外打开 websocket 连接?
Posted
技术标签:
【中文标题】如何在上下文管理器之外打开 websocket 连接?【英文标题】:How can I open a websocket connection outside of a context manager? 【发布时间】:2017-03-22 04:28:05 【问题描述】:这是在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
对象没有 send
和 recv
方法。
【问题讨论】:
【参考方案1】:用途:
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()
请记住,上下文管理器通常会为您提供帮助:您可能希望更改代码以使用它们而不是绕过它们。
【讨论】:
虽然此代码可能会回答问题,但提供有关它如何和/或为什么解决问题的额外上下文将提高答案的长期价值。 @Udi 我会喜欢使用上下文管理器 - 但它总是在任何协程可以使用它之前关闭 websocket 连接 除非你等待 即便如此,很遗憾。 @udi 道歉 - 它现在正在工作!有一个问题因为其他原因而不起作用,但我(希望)现在已经解决了!如果我可以让它在一个单独的线程中工作,那么整个问题将得到解决!以上是关于如何在上下文管理器之外打开 websocket 连接?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Windows 资源管理器中添加“在此处打开 git-bash ...”上下文菜单?
如何使用 websocket 安全地将我的 cli 应用程序连接到网站
如何使用 C 或 C++ 将选项添加到 Windows 资源管理器上下文菜单?