「连载」边缘计算(二十一)02-26:边缘部分源码(源码分析篇)

(接上篇)

DeviceTwin struct组成剖析

该部分对DeviceTwin struct的组成进行剖析。接着devicetwin struct调用链剖析的实例化DeviceTwin struct(dt := DeviceTwin{})往下剖析,进入DeviceTwin struct的定义,具体如下所示。

|----------------------------------------------------------------------------------------------------------|
| KubeEdge/edge/pkg/devicetwin/devicetwin.go |
| //DeviceTwin the module type DeviceTwin struct { context *context.Context dtcontroller *DTController } |

DeviceTwin struct的定义由 *context.Context 和 *DTController两部分组成。其中,*context.Context可以参考8.3.2,这里不再赘述。下面重点剖析DTController。

DTController的定义具体如下所示。

|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| KubeEdge/edge/pkg/devicetwin/dtcontroller.go |
| //DTController controller for devicetwin type DTController struct { HeartBeatToModule map[string]chan interface{} DTContexts *dtcontext.DTContext DTModules map[string]dtmodule.DTModule Stop chan bool } |

在DTController struct定义中发现\*dtcontext.DTContext和dtmodule.DTModule的定义具体如下所示。

|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| KubeEdge/edge/pkg/devicetwin/dtcontext/dtcontext.go |
| //DTContext context for devicetwin type DTContext struct { GroupID string NodeID string CommChan map[string]chan interface{} ConfirmChan chan interface{} ConfirmMap *sync.Map ModulesHealth *sync.Map ModulesContext *context.Context DeviceList *sync.Map DeviceMutex *sync.Map Mutex *sync.RWMutex // DBConn *dtclient.Conn State string } |

从DTContext struct的定义可以看出,DTContext struct主要用来实现devicetwin的通信和缓存。DTModule.DTModule struct定义如下所示。

|-------------------------------------------------------------------------------------------------|
| KubeEdge/edge/pkg/devicetwin/dtmodule/dtmodule.go |
| //DTModule module for devicetwin type DTModule struct { Name string Worker dtmanager.DTWorker } |

在 DTModule struct定义中,dtmanager.DTWorker是interface type,定义如下所示。

|----------------------------------------------------------------------|
| KubeEdge/edge/pkg/devicetwin/dtmanager/dtworker.go |
| //DTWorker worker for devicetwin type DTWorker interface { Start() } |

从dtmanager.DTWorker的interface type可以推测DTModule有多种类型,而且都实现了DTWorker interface。KubeEdge/edge/pkg/devicetwin/dtmodule/dtmodule.go中的InitWorker()就是用来实例化DTModule的多种类型的,具体定义如下所示。

|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| KubeEdge/edge/pkg/devicetwin/dtmodule/dtmodule.go |
| // InitWorker init worker func (dm *DTModule) InitWorker(recv chan interface{}, confirm chan interface{}, heartBeat chan interface{}, dtContext *dtcontext.DTContext) { switch dm.Name { case dtcommon.MemModule: dm.Worker = dtmanager.MemWorker{ Group: dtcommon.MemModule, Worker: dtmanager.Worker{ ReceiverChan: recv, ConfirmChan: confirm, HeartBeatChan: heartBeat, DTContexts: dtContext, }, } ... } |

从InitWorker()函数的定义中可以梳理出,DTModule有MemWorker、TwinWorker、DeviceWorker和CommWorker四种类型。

到此,EdgeCore中devicetwin的struct调用链剖析就全部结束了。

未完待续......

相关推荐
港股研究社几秒前
投在预期差:市场还没定价百融的Agent未来
人工智能
AC赳赳老秦6 分钟前
OpenClaw image-processing技能实操:批量抠图、图片尺寸调整,适配办公需求
开发语言·前端·人工智能·python·深度学习·机器学习·openclaw
Agent产品评测局9 分钟前
企业生产报工自动化落地,数据采集全流程实现方案 —— 2026制造业数字化转型深度选型指南
运维·人工智能·ai·chatgpt·自动化
帮我吧智能服务平台11 分钟前
工业4.0下,装备制造全生命周期服务数字化落地方案(附实操案例)
网络·人工智能·制造
hqyjzsb13 分钟前
深度洞察人性需求!拆解传统心理咨询升级AI智慧辅导师数智工作流
人工智能·深度学习·学习·数据挖掘·aigc·学习方法·业界资讯
Project_Observer16 分钟前
为您的项目选择最合适的Zoho Projects自动化巧能
大数据·运维·人工智能·深度学习·机器学习·自动化·编辑器
江瀚视野18 分钟前
阿里认领HappyHorse,全新大模型会带来什么?
人工智能
小程故事多_8018 分钟前
AI Coding 工程化革命,Superpowers 管流程,ui-ux-pro-max 管质感
人工智能·ui·架构·aigc·ai编程·ux·claude code
老刘说AI29 分钟前
Coze:从入门到精通
人工智能·低代码·语言模型·开放原子·知识图谱·持续部署
IT观测36 分钟前
选高低温环境试验箱,品牌、生产商、厂家哪个维度更可靠?
大数据·人工智能