跳转到内容

移动端交互(大屏侧) ​

大屏与移动端通过 WebSocket 长连接 通信,移动端的提问、模式切换等指令经后端转发到大屏,大屏的回答再经后端回推移动端。


一、WebSocket 通道 ​

{ws|wss}://{VITE_AI_APP_HOST}/ws/digital-human
  ?clientType=screen|mobile&clientId=xxx[&pairingCode=xxx]
  • 协议随页面协议自动切换(https → wss);
  • 心跳 30 秒 一次 HEARTBEAT_REQ;
  • 大屏端断线指数退避自动重连:最多 5 次,延迟 min(1000 × 2^n, 30000) ms。

消息类型:

type方向说明
SCREEN_REGISTER后端 → 大屏下发屏幕端 clientId
PAIRING_SUCCESS后端 → 双端携带 { deviceIp, deviceName, userAgent, pairedAt },大屏插入"📱 xxx 已配对"
PAIRING_FAIL后端 → 手机断开并提示原因
COMMAND手机 → 大屏{ text, type: 'text'|'voice', mode, knowledgeCategory? }
RESPONSE大屏 → 手机字符串 / { text } / { error } / { text, subtype:'search', searchResult }
DISCONNECT后端 → 双端携带原因,大屏显示"📱 xxx 已断开连接"
KICKED后端 → 手机被大屏踢出,弹提示后 store.reset() 回到扫码页
HEARTBEAT_REQ / HEARTBEAT_RESP双向保活

模式同步采用 piggyback ​

移动端不发送独立的 MODE_CHANGE 消息(后端可能不识别并断开连接),而是把 mode 挂在 COMMAND 载荷里,大屏收到后先 setMode 再处理,保证两端模式一致。


二、大屏侧指令处理 ​

大屏收到移动端 COMMAND 后进入 handleMobileCommand(实现位于 core/connection.js):

  1. 取出 text / type / mode / knowledgeCategory;
  2. 按当前模式走 interactive / expert / demo 分支;
  3. 渲染回答并触发 TTS 播报;
  4. 通过 RESPONSE 将结果回推移动端渲染。

移动端侧的扫码、遥控面板与问答链路,见 移动端与大屏交互。

数字人「小慧」项目文档