Skip to content

设备接入(TCP 协议) ​

这篇解决什么 ​

TCP 长连接怎么拆包、和 JSON 帧怎么对上。读完能对上 protocol: tcp 和 IotTcpProtocol,先定 codec,再写设备固件。

产品 protocolType 填 tcp。先看 设备接入(概述)。认证三件套与 MQTT 同一套工具类。

示意图:先拆出一帧,再反序列化成 IotDeviceMessage。

从哪改 ​

名称说明仓库路径
协议Vert.x NetServerruoyi-office/yudao-module-iot/yudao-module-iot-gateway/.../tcp/IotTcpProtocol.java
拆包delimiter / length_field / fixed_lengthIotTcpCodecTypeEnum / IotTcpConfig
上行注册、认证、业务IotTcpUpstreamHandler
连接上限、心跳IotTcpConnectionManager
样例id: tcp-json,默认关,端口 8091application.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样例 8091ProtocolProperties
tcp.codec.typedelimiter / length_field / fixed_lengthIotTcpConfig.CodecConfig
delimiter / fixed-length换行或定长同上
max-connections默认 1000IotTcpConfig

拆包和固件必须同一套

网关按 \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 首页

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

相关篇 ​

联系我们

获取报价、演示和二开方案

微信咨询二维码

微信咨询

17156169080

添加时备注「RuoYi Office」

在线体验商业版