「连载」边缘计算(二十四)03-04:边缘部分源码(源码分析篇)

(接上篇)

在Register()函数中对EdgeHub struct的初始化只是对EdgeHub struct中的controller进行初始化。controller的初始化函数具体如下所示。

|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| KubeEdge/edge/pkg/edgehub/controller.go |
| //NewEdgeHubController creates and returns a EdgeHubController object func NewEdgeHubController() *Controller { return &Controller{ config: &config.GetConfig().CtrConfig, stopChan: make(chan struct{}), syncKeeper: make(map[string]chan model.Message), } } |

NewEdgeHubController()函数中嵌套了一个获取配置信息的函数调用,具体如下所示。

|----------------------------------------|
| config: &config.GetConfig().CtrConfig |

config.GetConfig()函数定义具体如下所示。

|------------------------------------------------------------------------------------------------------------------------------------------------------|
| KubeEdge/edge/pkg/edgehub/config/config.go |
| var edgeHubConfig EdgeHubConfig ... //GetConfig returns the EdgeHub configuration object func GetConfig() *EdgeHubConfig { return &edgeHubConfig } |

GetConfig()函数只返回了&edgeHubConfig,而edgeHubConfig是一个EdgeHubConfig struct类型的全局变量。至于该变量是在哪里被赋值,怎么赋值的,暂且留个疑问------* EdgeHubConfig赋值疑问。

到此,EdgeHub struct的初始化就告一段落了。下面分析EdgeHub的启动函数,具体如下所示。

|-----------------------------------------------------------------------------------------------------------------------------------------|
| KubeEdge/edge/pkg/edgehub/module.go |
| //Start sets context and starts the controller func (eh *EdgeHub) Start(c *context.Context) { eh.context = c eh.controller.Start(c) } |

EdgeHub启动函数Start()只做了两件事。

  1. 接收并存储传入的消息管道;
  2. 启动EdgeHub的controller。

由前面的分析可知,EdgeHub的controller作为EdgeHub功能的主要载体。其启动函数囊括EdgeHub绝大部分启动逻辑。继续进入controller的启动函数,具体如下所示。

|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| KubeEdge/edge/pkg/edgehub/controller.go |
| //Start will start EdgeHub func (ehc *Controller) Start(ctx *context.Context) { config.InitEdgehubConfig() for { err := ehc.initial(ctx) ... err = ehc.chClient.Init() ... // execute hook func after connect ehc.pubConnectInfo(true) go ehc.routeToEdge() go ehc.routeToCloud() go ehc.keepalive() // wait the stop singal // stop authinfo manager/websocket connection <-ehc.stopChan ehc.chClient.Uninit() // execute hook fun after disconnect ehc.pubConnectInfo(false) // sleep one period of heartbeat, then try to connect cloud hub again time.Sleep(ehc.config.HeartbeatPeriod * 2) // clean channel clean: for { select { case <-ehc.stopChan: default: break clean } } } } |

从Controller的启动函数Start()的定义,可以清楚地看到其包含了EdgehubConfig初始化、各种业务go routine的启动和最后的退出清理。下面逐个深入剖析。

未完待续......

相关推荐
88号技师29 分钟前
2024年12月一区SCI-加权平均优化算法Weighted average algorithm-附Matlab免费代码
人工智能·算法·matlab·优化算法
IT猿手30 分钟前
多目标应用(一):多目标麋鹿优化算法(MOEHO)求解10个工程应用,提供完整MATLAB代码
开发语言·人工智能·算法·机器学习·matlab
88号技师30 分钟前
几款性能优秀的差分进化算法DE(SaDE、JADE,SHADE,LSHADE、LSHADE_SPACMA、LSHADE_EpSin)-附Matlab免费代码
开发语言·人工智能·算法·matlab·优化算法
2301_7644413334 分钟前
基于python语音启动电脑应用程序
人工智能·语音识别
HyperAI超神经1 小时前
未来具身智能的触觉革命!TactEdge传感器让机器人具备精细触觉感知,实现织物缺陷检测、灵巧操作控制
人工智能·深度学习·机器人·触觉传感器·中国地质大学·机器人智能感知·具身触觉
galileo20161 小时前
转化为MarkDown
人工智能
说私域2 小时前
私域电商逆袭密码:AI 智能名片小程序与商城系统如何梦幻联动
人工智能·小程序
请站在我身后2 小时前
复现Qwen-Audio 千问
人工智能·深度学习·语言模型·语音识别
love you joyfully2 小时前
目标检测与R-CNN——paddle部分
人工智能·目标检测·cnn·paddle
AI视觉网奇3 小时前
Detected at node ‘truediv‘ defined at (most recent call last): Node: ‘truediv‘
人工智能·python·tensorflow