ThingsBoard源码解析-WebSocket

描述主要以遥测数据为例

客户端订阅

ws://domain:port/api/ws/plugins/telemetry
查看ws配置文件:WebSocketConfiguration
ThingsBoard源码解析-WebSocket_第1张图片
TbWebSocketHandler继承TextWebSocketHandler,是ws处理器

// 处理客户端连接
TbWebSocketHandler#afterConnectionEstablished
// 处理客户端消息
TbWebSocketHandler#handleTextMessage

客户端连接

ThingsBoard源码解析-WebSocket_第2张图片

客户端订阅

ThingsBoard源码解析-WebSocket_第3张图片

其中消息详情如下:

{
        "attrSubCmds": [],
        "tsSubCmds": [{
                "entityType": "DEVICE",
                "entityId": "9ef6e4e0-63e3-11ed-bfa4-f731f8706caf",
                "scope": "LATEST_TELEMETRY",
                "cmdId": 1
        }],
        "historyCmds": [],
        "entityDataCmds": [],
        "entityDataUnsubscribeCmds": [],
        "alarmDataCmds": [],
        "alarmDataUnsubscribeCmds": [],
        "entityCountCmds": [],
        "entityCountUnsubscribeCmds": []
}

参数tsSubCmds表示订阅时序数据的指令,具体是订阅设备(9ef6e4e0-63e3-11ed-bfa4-f731f8706caf)最新的时序数据。


ThingsBoard源码解析-WebSocket_第4张图片

ThingsBoard源码解析-WebSocket_第5张图片

遥测更新推送

// 时序数据规则节点,接收时序消息
TbMsgTimeseriesNode#onMsg
// 保存并通知遥测数据
ctx.getTelemetryService().saveAndNotify
DefaultTelemetrySubscriptionService#doSaveAndNotify
DefaultTelemetrySubscriptionService#saveAndNotifyInternal
// 添加时序数据保存后回调方法
DefaultTelemetrySubscriptionService#addCallbacks
addWsCallback(saveFuture, success -> onTimeSeriesUpdate(tenantId, entityId, ts));
// 调用时序数据库服务保存时序数据之后,执行回调方法onTimeSeriesUpdate
DefaultTelemetrySubscriptionService#onTimeSeriesUpdate
DefaultSubscriptionManagerService#onTimeSeriesUpdate
DefaultSubscriptionManagerService#onLocalTelemetrySubUpdate
DefaultTbLocalSubscriptionService#onSubscriptionUpdate
// 执行订阅的更新消费者
subscription.getUpdateConsumer().accept(sessionId, update)
// consumer是在客户端订阅时保存到订阅对象中的,时序数据订阅对象的consumer如下:
DefaultTelemetryWebSocketService#sendWsMsg(TelemetryWebSocketSessionRef, int, Object)

你可能感兴趣的:(thingsboard,websocket,网络协议,网络)