moon-mqtt-client 运行时架构

moon-mqtt-client 运行时架构 A architecture diagram generated by Archify. 客户端进程(native 二进制,含静态链接的第三方包) Broker 信任域 应用任务 · with_client 回调作用域 · 客户端进程(native 二进制,含静态链接的第三方包) 应用任务 with_client 回调作用域 客户端 API · publish · subscribe · stats · 客户端进程(native 二进制,含静态链接的第三方包) 客户端 API publish · subscribe · stats 监督任务 · dial · 重连 · generation · 客户端进程(native 二进制,含静态链接的第三方包) 监督任务 dial · 重连 · generation 心跳任务 · PINGREQ / PINGRESP 计时 · 客户端进程(native 二进制,含静态链接的第三方包) 心跳任务 PINGREQ / PINGRESP 计时 会话与请求表 · 发送队列 + 控制队列 · 客户端进程(native 二进制,含静态链接的第三方包) 会话与请求表 发送队列 + 控制队列 写循环 · 控制包优先出队 · 客户端进程(native 二进制,含静态链接的第三方包) 写循环 控制包优先出队 TCP + TLS 传输 · 仅服务端认证,不可关闭 · 客户端进程(native 二进制,含静态链接的第三方包) TCP + TLS 传输 仅服务端认证,不可关闭 MQTT Broker · 3.1.1 · QoS 0/1 · Broker 信任域 MQTT Broker 3.1.1 · QoS 0/1 读循环 · 分帧装配器 · 客户端进程(native 二进制,含静态链接的第三方包) 读循环 分帧装配器 事件队列 · Connected · Disconnected · Message · 客户端进程(native 二进制,含静态链接的第三方包) 事件队列 Connected · Disconnected · Message zbhzs1/moonbit-mqtt · 报文编解码 · 客户端进程(native 二进制,含静态链接的第三方包) · 第三方包 zbhzs1/moonbit-mqtt 报文编解码 第三方包 moonbitlang/async · 任务组 · aqueue · cond_var · 客户端进程(native 二进制,含静态链接的第三方包) · 第三方包 moonbitlang/async 任务组 · aqueue · cond_var 第三方包 publish · subscribe request + 超时预算 有界发送队列 write_timeout_ms 单次写 MQTT 3.1.1 over TLS dial · CONNACK 每代派生 PINGREQ 走保留槽位 入站字节流 PUBACK · SUBACK · PINGRESP MessageReceived next_event() encode decode_packet 任务组 · 队列 · 定时 Legend Frontend Backend Security Message bus External

请求与失败语义

  • • operation_timeout_ms 覆盖排队、写入与等待 ACK
  • • 截止看门狗只唤醒条件变量,请求协程负责中止
  • • NotSent:字节从未进入 socket 写调用
  • • OutcomeUnknown:写已开始但未获确认

背压与控制通道

  • • 控制包独占 control_capacity 保留槽位
  • • 写循环先发控制包,PUBACK/PINGREQ 不被业务堵住
  • • 控制队列耗尽即 ProtocolError 中止,绝不丢包
  • • 会话 abort 时每个 pending 恰好结算一次

重连与会话恢复

  • • 仅 CleanSession=true,每次 CONNACK 递增 generation
  • • 先恢复已确认订阅,再发 Connected(generation)
  • • 有界指数退避加每客户端 xorshift 抖动
  • • QoS 0 写完即返回,QoS 1 需匹配 PUBACK

信任边界与范围

  • • TLS 只做服务端认证:SystemRoots / CustomCA
  • • 无关闭校验的开关;password 必须配 username
  • • ClientStats 只含计数与队列占用
  • • 无 QoS 2、MQTT 5、离线队列与 WebSocket