「连载」边缘计算(二十四)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的启动和最后的退出清理。下面逐个深入剖析。

未完待续……  

  • 18
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值