我需要有关python web框架工作的帮助,Quart,更具体地说是websockets。我希望能够在连接时注册客户端(将其添加到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)
但这不适用于夸脱网页套件。
帮助将不胜感激。
答案 0 :(得分:1)
此装饰器用于包装websocket处理程序时,将从connected
集添加和删除websockets。需要使用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的作者。