gpt4 book ai didi

python - 带有 python Web 框架的 Websockets "quart"?

转载 作者:行者123 更新时间:2023-12-01 01:59:24 24 4
gpt4 key购买 nike

我需要有关 python Web 框架工作的帮助,Quart ,更具体地说是网络套接字。我希望能够在连接时注册客户端(将其添加到 python 列表),并在断开连接时取消注册它们(将其从 python 列表中删除)。我在网上能找到的最接近的东西是这段代码:

connected = set()

async def handler(websocket, path):
global connected
# Register.
connected.add(websocket)
try:
# Implement logic here.
await asyncio.wait([ws.send("Hello!") for ws in connected])
await asyncio.sleep(10)
finally:
# Unregister.
connected.remove(websocket)

source

但这不适用于 quart websockets。

如果有帮助,我们将不胜感激。

最佳答案

此装饰器用于包装 Websocket 处理程序时,将从 connected 集中添加和删除 Websocket。需要使用websocket的_get_current_object方法来获取当前context中的websocket ,并且需要 try-finally 来确保删除 websocket,无论引发任何错误。请注意,app.websocket 必须包装(位于)collect_websocket 用法之前。

from functools import wraps

connected = set()

def collect_websocket(func):
@wraps(func)
async def wrapper(*args, **kwargs):
global connected
connected.add(websocket._get_current_object())
try:
return await func(*args, **kwargs)
finally:
connected.remove(websocket._get_current_object())
return wrapper


@app.websocket('/ws')
@collect_websocket
async def ws():
...

编辑:我是 Quart 作者。

关于python - 带有 python Web 框架的 Websockets "quart"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49837294/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com