【Thingsboard】源码分析:Websocket 和前端交互

本文深入分析了Thingsboard系统中Websocket与前端交互的实现,包括TextWebSocketHandler的消息下发方法,TbWebSocketHandler的连接创建、关闭、异常处理及消息处理流程,TelemetryWebSocketService在链接建立和客户端请求时的处理,以及DefaultTbLocalSubscriptionService和DefaultSubscriptionManagerService的角色。同时,重点探讨了缓存map的使用及其在消息推送中的关键作用。
摘要由CSDN通过智能技术生成
处理类是   TbWebSocketHandler  ,该类继承了  TextWebSocketHandler   开源  ws  工具。

TextWebSocketHandler】   

这个是  spring-websocket  里面的工具,该工具用法:
onopen 对应 afterConnectionEstablished
onclose 对应 afterConnectionClosed
onMessage 对应 handleTextMessage

查看消息下发给 session 的方法:

### ThingsBoard 规则链与 WebSocket 集成 #### 创建 WebSocket 转发器规则节点 为了实现 ThingsBoard 中的 WebSocket 数据流处理,可以创建一个自定义规则节点来监听特定事件并将这些事件通过 WebSocket 推送给前端应用。 ```javascript const ws = require('ws'); let webSocketServer; function startWebSocket() { webSocketServer = new ws.Server({ port: 9001, path: '/data' }); webSocketServer.on('connection', function connection(wsClient) { console.log("New client connected"); // 当有新消息到达时触发此回调函数 wsClient.on('message', function incoming(message) { console.log(`Received from client ${message}`); }); // 断开连接时调用该方法 wsClient.on('close', function close() { console.log('Disconnected'); }); }); } startWebSocket(); ``` 当构建好上述基础结构之后,在 ThingsBoard 的规则链编辑界面里新增加一个 **Script Transformation Node**, 输入如下脚本: ```groovy // 假设已经有一个全局变量 `webSocketServer` 存储着 WebSocket Server 实例. if (msgType == 'POST_TELEMETRY_REQUEST') { try { let dataString = JSON.stringify(msg); webSocketServer.clients.forEach(function each(client) { if (client.readyState === ws.OPEN) { client.send(dataString); } }); return { msg: null, metadata: {}, msgType: "NO_ERROR" }; } catch(e){ log.warn("Error while sending message via WS", e); throw e; } } else { return { msg: originalMsg, metadata: originalMetadata, msgType: originalMsgType }; } ``` 这段 Groovy 代码会拦截所有来自设备上传感器数据的消息 (`POST_TELEMETRY_REQUEST`) 并尝试将其发送给每一个已建立好的 WebSocket 连接客户端。如果成功,则返回无错误状态;如果有任何异常发生,则记录警告日志并抛出异常终止当前流程[^1]。 对于想要接收推送通知的应用程序来说,只需要按照标准方式打开 Web Socket 连接到服务器即可: ```html <script> var socket = new WebSocket('ws://yourserverip:9001/data'); socket.addEventListener('open', function(event) { console.log("Connected to server."); }); socket.addEventListener('message', function(event) { var telemetryData = JSON.parse(event.data); updateUI(telemetryData); // 自定义 UI 更新逻辑 }); </script> ``` 以上就是如何利用 ThingsBoard 的规则链机制配合 WebSocket 技术实现实时通信的一个简单例子[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

0x13

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值