首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何阻止我的websocket连接关闭?

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

Stack Overflow用户
提问于 2021-04-28 23:12:54
回答 1查看 1.2K关注 0票数 1

我是websockets和异步通信的新手,我正在尝试使用一个简单的示例。我希望创建一个服务器,该服务器接受来自多个客户端的连接,并同时运行一个循环,该循环每秒钟向每个连接发送一条消息。我还试图使用asyncio.run(),我认为它比许多示例所基于的get_event_loop()代码更可取。

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

代码语言:javascript
运行
复制
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()中向客户端发送一条消息时,会收到一个错误,因为连接已经关闭。我应该如何更改我的代码来阻止这种情况的发生?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-29 17:58:05

我应该如何更改代码来阻止这种情况的发生?

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

代码语言:javascript
运行
复制
async def register(websocket, path):
    USERS.add(websocket)
    await websocket.send("Successfully registered")
    await asyncio.Event().wait()

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67309060

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档