Skip to content

WebSocket 建立链接

当 client 可以保持一个长连接时,优先使用 websocket transport。

入口

  • ws://127.0.0.1:47372
  • 启用 TLS 后是 wss://127.0.0.1:47372

消息模型

websocket 端点收发的是 JSON 编码的 MDP message。

事件类型

websocket transport 通过 type 字段区分事件类型。

事件类型方向分类作用
registerClientClient -> Server生命周期注册一个 client 及其 capability 元数据
updateClientCatalogClient -> Server生命周期替换一个已注册的路径目录
unregisterClientClient -> Server生命周期注销一个已注册 client
callClientServer -> Client调用把路由后的 capability 调用下发给 client
callClientResultClient -> Server调用回传一次路由调用的执行结果
ping双向心跳保持连接存活
pong双向心跳确认一次心跳

按方向查看

client 发给 server 的事件:

server 发给 client 的事件:

典型事件流

一条常见的 websocket 链路通常是:

  1. 打开 websocket
  2. 发送 registerClient
  3. 当本地路径目录变化时,可选发送 updateClientCatalog
  4. server 有任务时下发 callClient
  5. client 回传 callClientResult
  6. 会话期间双向收发 pingpong
  7. 断开前可选发送 unregisterClient

时序图

每类事件是干什么的

  • registerClient:声明 client 身份,以及当前的路径目录。
  • updateClientCatalog:在不变更 client 身份的前提下,替换一个已注册路径目录。
  • unregisterClient:在 transport 还活着时,移除某一个逻辑 client 注册。
  • callClient:携带一次被 server 路由过来的调用,包含 requestId、目标 client、methodpath,以及可选的 params/query/body/headers/auth。
  • callClientResult:结束一次调用,返回 dataerror
  • ping:要求对端确认连接仍然存活。
  • pong:确认收到了一次 ping

适合什么时候用

  • 运行时能稳定持有 socket
  • 希望降低双向消息延迟
  • 不想自己维护 long-poll session

模型驱动协议