设备接入(TCP 协议)
这篇解决什么
TCP 长连接怎么拆包、和 JSON 帧怎么对上。读完能对上 protocol: tcp 和 IotTcpProtocol,先定 codec,再写设备固件。
产品 protocolType 填 tcp。先看 设备接入(概述)。认证三件套与 MQTT 同一套工具类。
示意图:先拆出一帧,再反序列化成 IotDeviceMessage。
从哪改
| 名称 | 说明 | 仓库路径 |
|---|---|---|
| 协议 | Vert.x NetServer | ruoyi-office/yudao-module-iot/yudao-module-iot-gateway/.../tcp/IotTcpProtocol.java |
| 拆包 | delimiter / length_field / fixed_length | IotTcpCodecTypeEnum / IotTcpConfig |
| 上行 | 注册、认证、业务 | IotTcpUpstreamHandler |
| 连接 | 上限、心跳 | IotTcpConnectionManager |
| 样例 | id: tcp-json,默认关,端口 8091 | application.yaml |
样例:serialize: json,tcp.max-connections=1000,keep-alive-timeout-ms=30000。codec 默认 type: delimiter,delimiter: "\\n"。也可改 length_field(偏移、长度字节、adjustment、strip)或 fixed_length。
上行 Handler 认动态注册、认证和业务帧。注册成功回 deviceSecret。之后帧按产品 serializeType 走 IotMessageSerializer。
心跳超时由连接管理器踢掉空闲 socket,并回写离线。下行:IotTcpDownstreamSubscriber 从总线取指令,再写入同一条连接。
SSL 可在实例上开证书。二进制 serialize: binary 要和固件编解码一起改,不要只改 yaml 里的 json 样例。
字段
| 名称 | 说明 | 仓库路径 |
|---|---|---|
port | 样例 8091 | ProtocolProperties |
tcp.codec.type | delimiter / length_field / fixed_length | IotTcpConfig.CodecConfig |
delimiter / fixed-length | 换行或定长 | 同上 |
max-connections | 默认 1000 | IotTcpConfig |
拆包和固件必须同一套
网关按 \n 切、设备按长度头粘包,两边都「能连上」,业务帧永远解不出来。先对 codec,再对 JSON 字段。
端口不要和 HTTP / UDP 样例撞
HTTP 样例 8092,UDP 样例 8093,WebSocket 样例 8094。只开 TCP 时改自己的 port 即可。
示意图:按本仓库实现画的时序。
配置与操作
yaml 开 id: tcp-json,protocol: tcp,默认口 8091。先定 tcp.codec.type(delimiter / length_field / fixed_length),样例分隔符 \\n。认证三件套与 MQTT 同一套工具类。空闲超时 keep-alive-timeout-ms 会踢连接并标离线。
二进制 serialize: binary 要和固件一起改。开启见 IoT 功能设计。

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