python network_error ai_generated true

WebSocket 连接意外关闭错误

websockets.exceptions.ConnectionClosedError: WebSocket connection closed unexpectedly

ID: python/starlette-websocket-disconnect-error

其他格式: JSON · Markdown 中文 · English
80%修复率
84%置信度
0证据数
2024-11-05首次发现

版本兼容性

版本状态引入弃用备注
3.10 active
3.11 active

根因分析

Starlette WebSocket 连接因网络问题或客户端断开而意外关闭

English

Starlette WebSocket 连接因网络问题或客户端断开而意外关闭

generic

解决方案

  1. 90% 成功率 捕获异常并优雅地关闭连接
    try:
        await websocket.receive_text()
    except WebSocketDisconnect:
        await websocket.close()
  2. 85% 成功率 实现心跳机制检测连接状态
    async def heartbeat():
        while True:
            await asyncio.sleep(30)
            await websocket.send_json({'type': 'ping'})

无效尝试

常见但无效的做法:

  1. 忽略异常并继续发送消息 95% 失败

    连接已关闭,发送消息会引发更多错误

  2. 无限重试连接而不检查状态 80% 失败

    可能导致无限循环和资源浪费