# WebSocket 连接意外关闭错误

- **ID:** `python/starlette-websocket-disconnect-error`
- **领域:** python
- **类别:** network_error
- **验证级别:** ai_generated
- **修复率:** 80%

## 根因

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

## 版本兼容性

| 版本 | 状态 | 引入 | 弃用 |
|------|------|------|------|
| 3.10 | active | — | — |
| 3.11 | active | — | — |

## 解决方案

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'})
   ```

## 无效尝试

- **忽略异常并继续发送消息** — 连接已关闭，发送消息会引发更多错误 (95% 失败率)
- **无限重试连接而不检查状态** — 可能导致无限循环和资源浪费 (80% 失败率)
