如何阻止我的 websocket 连接关闭?

How can I stop my websocket connection from closing?

我是 websockets 和 asyncio 的新手,我正在尝试让一个简单的示例起作用。我想创建一个服务器,它接受来自多个客户端的连接,并同时 运行s 一个循环,每秒向每个连接发送一次消息。我也在尝试使用 asyncio.run() 我认为它比许多示例所基于的 get_event_loop() 代码更受欢迎。

到目前为止,这是我的代码:

import asyncio
import websockets

USERS = set()

async def register(websocket, path):
    USERS.add(websocket)
    await websocket.send("Successfully registered")

async def count():
    count = 0
    while True:
        print(f"Iteration: {count}")
        if USERS:
            for user in USERS:
                await user.send("Sending message back to client")
        await asyncio.sleep(1)
        count +=1

async def serve():
    server = await websockets.serve(register, 'localhost', 8765)
    await server.wait_closed()
    print("Server closed")

async def main():
    await asyncio.gather(count(), serve())

asyncio.run(main())

当我 运行 这个计数协程工作时,直到我从客户端建立连接。此时连接已成功注册,但是当我尝试在 count() 中将消息发送回客户端时,我收到错误消息,因为连接已关闭。我应该如何更改我的代码以阻止这种情况发生?

How should I change my code to stop this from happening?

问题可能是您的处理程序 register 协程立即返回,这会提示 websockets 关闭连接。尝试像这样更改它:

async def register(websocket, path):
    USERS.add(websocket)
    await websocket.send("Successfully registered")
    await asyncio.Event().wait()

如果有帮助,您可以将事件与 websocket 一起放在 USERS 中,这样您就可以在需要时终止与客户端的连接。