如何永远运行异步 websocket 客户端?

Posted

技术标签:

【中文标题】如何永远运行异步 websocket 客户端?【英文标题】:How to run forever async websocket client? 【发布时间】:2019-04-19 01:07:10 【问题描述】:

我正在尝试将 websocket 用于客户端。客户端发送一些开始消息,之后,无论何时发送或不发送,他都可以接收消息。客户端是异步的,我从 doc 获得了一些代码,但我不知道我的生活在做什么。

async def wsrun(uri):
    async with websockets.connect(uri) as websocket:
        await websocket.send('hey')
        print(await websocket.recv()) # Starts receive things, not only once

asyncio.get_event_loop().run_until_complete(wsrun('wss://localhost:1515'))

问题是,websocket recv 只显示服务器发送的第一件事:(

【问题讨论】:

【参考方案1】:

虽然我对你的生活无能为力,但试试这个:

async def wsrun(uri):
    async with websockets.connect(uri) as websocket:
        await websocket.send('hey')
        while True:
            print(await websocket.recv()) # Starts receive things, not only once

asyncio.get_event_loop().run_until_complete(wsrun('wss://localhost:1515'))

【讨论】:

谢谢@drum 先生。我认为它的工作原理:v。但是现在我遇到了一个问题,我正在创建一个与我的聊天集成的不和谐机器人。呜呜呜。当我“运行”不和谐时,代码挂起,所以 websocket 没有初始化,当我初始化我的 websocket 时,它手不和谐没有初始化。在另一个线程中运行异步“任务”没有意义,是吗? 算了。我设法让它工作。也再次感谢您的提示 xD

以上是关于如何永远运行异步 websocket 客户端?的主要内容,如果未能解决你的问题,请参考以下文章

Tornado websocket 客户端:如何异步 on_message? (从未等待协程)

Rails WebSocket 客户端永远不会触发 OnOpen

Python 多线程服务器和与 Android 客户端的异步 websocket 通信

如何使用 boost beast websocket 客户端收听 websocket 提要?

如何停止 Python Websocket 客户端“ws.run_forever”

Boost :: Beast Websocket双向流(C ++)