设备接入(UDP 协议)
这篇解决什么
无连接上报怎么认会话、业务帧为什么还要带 Token。读完能对上 protocol: udp 和 IotUdpProtocol,不要按 TCP 长连接去理解。
产品 protocolType 填 udp。先看 设备接入(概述)。拆包对比见 设备接入(TCP 协议)。
示意图:一包一帧。认证后发 JWT。后续包必须带 token。
从哪改
| 名称 | 说明 | 仓库路径 |
|---|---|---|
| 协议 | Vert.x DatagramSocket | ruoyi-office/yudao-module-iot/yudao-module-iot-gateway/.../udp/IotUdpProtocol.java |
| 上行 | auth / 注册 / 业务 | IotUdpUpstreamHandler |
| 会话 | 按来源地址,Guava 过期 | IotUdpSessionManager |
| 样例 | id: udp-json,默认关,端口 8093 | application.yaml |
样例:serialize: json,udp.max-sessions=1000,session-timeout-ms=60000,收发缓冲 65536。没有 TCP 那种 delimiter,一包就是一帧。
method=auth:params 里 username / password(同一套 HMAC)。成功回 token,并按来源 IP:端口登记会话、报上线。
method=thing.auth.register:一型一密,不带 Token。业务帧 params 要有 token + body,Token 无效直接未授权。
下行:IotUdpDownstreamSubscriber 按会话地址把指令发回去。源地址变了等于新会话,要重新 auth。
字段
| 名称 | 说明 | 仓库路径 |
|---|---|---|
port | 样例 8093 | ProtocolProperties |
max-sessions / session-timeout-ms | 会话上限与空闲过期 | IotUdpConfig |
token / body | 业务 params | IotUdpUpstreamHandler |
NAT 换端口等于掉线
会话键是来源地址。设备经过 NAT 换了 UDP 源端口,旧会话作废,下行也找不到人。要重新 auth。
业务包不要只靠会话
Handler 仍验 JWT。只连上、不带 token,会回「请先进行认证」。
示意图:按本仓库实现画的时序。
配置与操作
yaml 开 id: udp-json,protocol: udp,默认口 8093。无连接,业务帧仍要带 Token。不要按 TCP 长连接去理解会话。产品 protocolType 填 udp。
开启见 IoT 功能设计。

本系统截图:IoT 首页。协议实例在网关 yaml,没有「MQTT / HTTP」独立菜单。
