fix(ws): echo WebSocket subprotocol on accept to fix browser handshake

后端 ws_manager.connect/connect_employee 与 ws.py 调用未回显客户端协商的 Sec-WebSocket-Protocol (bearer.{token}),导致浏览器以 'Sent non-empty Sec-WebSocket-Protocol header but no response' 拒绝握手,H5/坐席 WS 实际一直走 3s 轮询兜底而非流式打字机。现回显 subprotocol 修复握手。验证:dev 真实浏览器 E2E 343 帧 typewriter;生产 docker cp 部署后日志显示 H5/坐席 WS 连接 [accepted] 且 连接建立。
This commit is contained in:
Simon
2026-07-09 09:16:43 +08:00
parent ba068d3642
commit bacd34c34d
2 changed files with 14 additions and 8 deletions
+4 -4
View File
@@ -132,8 +132,8 @@ async def websocket_endpoint(
# 认证通过,建立连接
# ======================================================================
# 注册连接(内部会调用 websocket.accept()
await ws_manager.connect(agent_id, websocket)
# 注册连接(内部会调用 websocket.accept(),并回显协商的 subprotocol
await ws_manager.connect(agent_id, websocket, subprotocol=subprotocol)
logger.info(f"坐席 WebSocket 连接已认证: agent_id={agent_id}")
try:
@@ -289,8 +289,8 @@ async def h5_websocket_endpoint(
# 认证通过,建立连接
# ======================================================================
# 注册员工连接(内部会调用 websocket.accept()
await ws_manager.connect_employee(employee_id, websocket)
# 注册员工连接(内部会调用 websocket.accept(),并回显协商的 subprotocol
await ws_manager.connect_employee(employee_id, websocket, subprotocol=subprotocol)
logger.info(f"H5员工 WebSocket 连接已认证: employee_id={employee_id}")
try: