设备接入(WebSocket 协议)
这篇解决什么
设备 WebSocket 听哪条路径、帧格式跟谁一样。读完能对上 protocol: websocket 和 IotWebSocketProtocol,不要连到管理端 /infra/ws。
产品 protocolType 填 websocket。先看 设备接入(概述)。管理端通知那条 WS 见 IM WebSocket。
示意图:路径不对直接 reject。连上后第一帧仍是 auth / 注册。
从哪改
| 名称 | 说明 | 仓库路径 |
|---|---|---|
| 协议 | Vert.x HttpServer + WS | ruoyi-office/yudao-module-iot/yudao-module-iot-gateway/.../websocket/IotWebSocketProtocol.java |
| 上行 | auth / 注册 / 业务 | IotWebSocketUpstreamHandler |
| 连接 | 一设备一连接,旧的踢掉 | IotWebSocketConnectionManager |
| 样例 | id: websocket-json,默认关,端口 8094 | application.yaml |
样例:serialize: json,websocket.path=/ws,max-message-size / max-frame-size 默认 65536,idle-timeout-seconds=60。路径不等于配置值会拒绝握手。
帧语义接近 TCP:method=auth 带 username/password;thing.auth.register 走一型一密;其它帧要先认证。未认证业务帧回未授权。
可配实例 SSL。下行走同一条 WS。空闲超时由 HttpServer idleTimeout 断开。
这不是 yudao.websocket.path=/infra/ws。那条给管理端 im-notification。设备连 48080 的 /infra/ws 过不了设备认证。
字段
| 名称 | 说明 | 仓库路径 |
|---|---|---|
port | 样例 8094 | ProtocolProperties |
websocket.path | 默认 /ws | IotWebSocketConfig |
idle-timeout-seconds | 空闲断开 | 同上 |
method | auth / 注册 / 业务 | IotWebSocketUpstreamHandler |
两条 ws 不要混
设备:网关进程 + 配置端口 + /ws。人:单体 48080 + /infra/ws?token=。连错一边,会话在、设备不在线。
同设备重复连接会踢旧连接
registerConnection 发现已有连接会先断旧的。固件不要开两条 WS 当负载。
示意图:按本仓库实现画的时序。
配置与操作
yaml 开 id: websocket-json,protocol: websocket,默认口 8094。设备连网关这条 WS,不要连管理端 /infra/ws。产品 protocolType 填 websocket。帧语义对齐 HTTP / MQTT 的 IotDeviceMessage。
开启见 IoT 功能设计。

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