# 运行时错误：WebSocket连接意外关闭

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

## 根因

客户端或服务器端非正常关闭WebSocket连接

## 版本兼容性

| 版本 | 状态 | 引入 | 弃用 |
|------|------|------|------|
| 3.x | active | — | — |

## 解决方案

1. **在WebSocket处理中添加重连逻辑** (90% 成功率)
   ```
   async def websocket_endpoint(websocket):
    await websocket.accept()
    try:
        while True:
            data = await websocket.receive_text()
    except WebSocketDisconnect:
        print('Client disconnected')
   ```
2. **使用心跳检测保持连接** (85% 成功率)
   ```
   async def heartbeat(websocket):
    while True:
        await asyncio.sleep(30)
        await websocket.send_text('ping')
   ```

## 无效尝试

- **尝试重新连接而不处理关闭原因** — 未处理关闭原因可能导致无限重连 (50% 失败率)
- **在接收消息时不检查连接状态** — 已关闭的连接无法接收消息 (40% 失败率)
