# 2026-06-10 — RDP WebSocket 单循环中继(修复 Server timeout) ## 摘要 修复 Guacamole 客户端报 `Server timeout.`:双协程并发 `send/receive` 违反 Starlette WebSocket 约束,隧道 ping 无法回显;改为单循环中继,并按指令拆分转发。 ## 动机 客户端 `receiveTimeout` 默认 15s,期间必须收到服务端数据(含 ping 回显)。并发 `ws_to_guacd` / `guacd_to_ws` 会导致 ping 丢失。 ## 涉及文件 - `server/infrastructure/guacamole/ws_tunnel.py` - `server/infrastructure/guacamole/protocol.py` — `iter_raw_instructions` - `frontend/src/composables/rdp/useRdpSession.ts` — `receiveTimeout=90s` - `tests/test_guacamole_protocol.py` ## 验证 生产:3389 连接不再 15s 超时;guacd 日志有 RDPDR 连接。