gpt4 book ai didi

python - 使用 websockets 在 Python/Quart 中检测客户端断开连接

转载 作者:行者123 更新时间:2023-12-04 15:46:29 26 4
gpt4 key购买 nike

我有多个客户端,我将它们存储在一个列表中(已连接)。当客户端(浏览器)关闭时,我想从连接的 websockets 列表中删除这个 websocket。

我试过 pgjones 写的方法,稍作改动 ( https://medium.com/@pgjones/websockets-in-quart-f2067788d1ee ):

    def collect_websocket(func):
@wraps(func)
async def wrapper(*args, **kwargs):
global connected
data = await websocket.receive()
data_json = json.loads(data)

if data_json['msg_type'] == 'client_connect':
if "id" in data_json:
new_client = Client(data_json['id'], False, websocket._get_current_object())
connected.add(new_client)
try:
return await func(*args, **kwargs)
except Exception as e:
connected.remove(websocket._get_current_object())
finally:
for connect in connected:
if connect.ws == websocket._get_current_object():
connected.remove(connect)
break
return wrapper

...

进一步在代码中...

...

async def update_clients(self, input_survey):
try:
for client in connected:
if client.survey_id == input_survey.identifier:
my_websock = client.ws
message = { ... some message...
}
message_json = json.dumps(message)
await my_websock.send(message_json)
except:
var = traceback.format_exc()
constants.raven_client.captureException()
self.logger.error('ERROR updating clients: {}'.format(str(var)))

在 update_clients 中应该检测到发送到不再存在的 websocket 出错了……然后将其删除。但也不异常(exception)……?!

我也尝试过:

try:
await my_websock.send(message_json)
except asyncio.CancelledError:
print('Client disconnected')
raise

但还是没有发生异常...

最佳答案

将 quart 和 hypercorn 更新到 0.9/0.6 后,代码适用于 pc 上的浏览​​器。 (火狐、Chrome)

但是当我使用 iphone/ipad 建立连接并在之后关闭它时。连接没有被移除!

有什么建议吗?

关于python - 使用 websockets 在 Python/Quart 中检测客户端断开连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55552716/

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