跳到主要内容

WebSocket 客户端

网关以客户端身份向外发起连接到外部 streaming 服务器(ws / wss)的 endpoint, 实时接收推送消息的模式。

场景使用哪种模式
外部 IT 系统通过 REST POST 发送数值时HTTP 推送
外部 streaming 服务器通过 WebSocket 持续推送数值时WebSocket 客户端(本页)
直接读取厂内 PLC 数值时Modbus / OPC-UA

注册表单输入项

输入栏填写内容示例
IP 地址WebSocket 服务器主机192.168.10.99, stream.example.com
端口WebSocket 服务器端口(ws=80,wss=443 为标准)8765, 443
PATHendpoint 路径(默认 //stream/v1
TLS是否使用 wssfalse (ws) / true (wss)
SUBSCRIBE MESSAGE连接建立后发送一次的消息(可选){"op":"subscribe","topic":"line1.tempC"}
采集周期网关读取缓存值的周期(ms)1000

实际连接 URL:<scheme>://<host>:<port><PATH>(例:ws://192.168.10.99:8765/stream/v1


标签的 PLC 地址表示法 —— 4-mode JSON

当服务器发送的消息为 JSON 时,使用与 MQTT / Apache Kafka 相同的 4-mode 解码器提取数值。

假设服务器按如下方式推送:

{"tempC": 25.7, "humid": 40.2, "running": true, "meta":{"unit":"degC"}}
模式标签的 PLC 地址获取的值
KEY(top-level)tempC25.7
KEYhumid40.2
KEYrunningtrue
PATH(JSON Pointer):$.meta.unitdegC
RAW_raw_:_raw_(或留空)整条消息
SCALAR(消息不是 JSON 时)_raw_消息原文

WebSocket 为单一通道,因此没有 topic 部分 —— 将 : 前面部分留空,或直接只写 key 即可。

若不是 JSON,或希望原样接收整条消息,使用 _raw_ 或留空即可。


常见用例

用例做法
云端 streaming broker(实时行情、汇率、天气等)将服务器推送的 JSON 键原样注册为标签
ROS 2 / rosbridge_server连接 rosbridge 的 WebSocket → 接收 topic 消息
厂内自建 streaming 网关通常为明文 ws 8080 / 8765 —— tls=false
外部安全 SaaS(需要证书)wss 443 —— tls=true
服务器要求 subscribe 握手SUBSCRIBE MESSAGE 中填入约定的 payload

常见问题与解决

现象原因解决
收不到值服务器未推送消息wscat -c ws://<host>:<port><path> 直接接收,确认控制台是否有输出
收不到值未设置 subscribe 消息(而服务器要求)查阅服务器手册后注册 SUBSCRIBE MESSAGE
[WS] connect 실패: timeout防火墙 / 端口 / DNS确认端口是否被阻断,用 telnet / nc 检查 TCP 是否可连接
[WS] connect 실패: handshakepath / TLS 设置错误直接验证 URL <scheme>://<host>:<port><path>
TLS 证书错误自签名(self-signed)生产环境建议使用正式证书。临时情况可请系统管理员添加 cacerts
各 JSON 键的值为空消息格式不是 JSON先用 _raw_ 接收后确认格式

更详细的技术文档