(接上篇)
获取cloudhub client,具体如下所示。
|-----------------------------------------------------------------------------------|
| cloudHubClient, err := clients.GetClient(ehc.config.Protocol, config.GetConfig()) |
clients.GetClient()函数定义具体如下所示:
|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| KubeEdge/edge/pkg/edgehub/factory.go |
| //GetClient returns an Adapter object with new web socket func GetClient(clientType string, config *config.EdgeHubConfig) (Adapter, error) { switch clientType { case ClientTypeWebSocket: websocketConf := wsclient.WebSocketConfig{ ... } return wsclient.NewWebSocketClient(&websocketConf), nil case ClientTypeQuic: quicConfig := quicclient.QuicConfig{ ... } return quicclient.NewQuicClient(&quicConfig), nil default: klog.Errorf("Client type: %s is not supported", clientType) } return nil, ErrorWrongClientType } |
从GetClient()函数定义可以知道,该函数定义了ClientTypeWebSocket、ClientTypeQuic两种client类型,两者都实现了Adapter interface。遇到Adapter类型的client变量时,记得对应此处的ClientTypeWebSocket、ClientTypeQuic。
cloud client初始化,具体如下所示。
|---------------------------|
| err = ehc.chClient.Init() |
ehc.chClient.Init()函数对应获取cloudhub client中ClientTypeWebSocket、ClientTypeQuic的Init()方法。
向EdgeCore各模块广播已经连接成功的消息,具体如下所示。
|-------------------------------------------------------------|
| // execute hook func after connect ehc.pubConnectInfo(true) |
将从cloud部分收到的消息转发给指定edge部分的指定模块,具体如下所示。
|----------------------|
| go ehc.routeToEdge() |
将从edge部分的消息转发给cloud部分,具体如下所示。
|-----------------------|
| go ehc.routeToCloud() |
向cloud部分发送心跳信息,具体如下所示。
|--------------------|
| go ehc.keepalive() |
剩下的步骤都是在edgehub模块退出时的一些清理操作。
到此,EdgeCore组件的edgehub模块的剖析就结束了。
「 未完待续...... 」