当前位置: 首页 > news >正文

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

(接上篇)

ChannelContext struct定义如下所示。

KubeEdge/beehive/pkg/core/context/context.go

// ChannelContext is object for Context channel

type ChannelContext struct {

//ConfigFactory goarchaius.ConfigurationFactory

channels     map[string]chan model.Message

chsLock      sync.RWMutex

typeChannels map[string]map[string]chan model.Message

typeChsLock  sync.RWMutex

anonChannels map[string]chan model.Message

anonChsLock  sync.RWMutex

}

上述代码中,ChannelContext 函数实现了Context struct(KubeEdge/beehive/pkg/core/context/context.go)属性包含的所有interface(ModuleContextMessageContext)。毫无疑问,ChannelContext struct就是CloudCore中各功能模块相互通信的消息队列框架的真身了。

至于ChannelContext struct在CloudCore中各功能模块是如何相互通信的,感兴趣的读者可以根据本文的梳理自己去深入剖析。

cloudhub剖析

cloudhub功能模块启动函数的具体内容如下所示。

KubeEdge/cloud/edge/pkg/cloudhub/cloudhub.go

func (a *cloudHub) Start(c *beehiveContext.Context) {

var ctx context.Context

a.context = c

ctx, a.cancel = context.WithCancel(context.Background())

initHubConfig()

messageq := channelq.NewChannelMessageQueue(c)

// start dispatch message from the cloud to edge node

go messageq.DispatchMessage(ctx)

// start the cloudhub server

if util.HubConfig.ProtocolWebsocket {

go servers.StartCloudHub(servers.ProtocolWebsocket, messageq, c)

}

if util.HubConfig.ProtocolQuic {

go servers.StartCloudHub(servers.ProtocolQuic, messageq, c)

}

if util.HubConfig.ProtocolUDS {

// The uds server is only used to communicate with csi driver from KubeEdge on cloud.

// It is not used to communicate between cloud and edge.

go udsserver.StartServer(util.HubConfig, c)

}

}

从以上cloudhub的启动函数Start()定义中,可以清晰地看出cloudhub在启动时主要做了如下几件事。

1) 接收beehiveContext.Context的通信框架实例,并保存(a.context = c);

2) 初始化cloudhub的配置(initHubConfig());

3) 将接收到的beehiveContext.Context的通信框架实例进行修饰(messageq := channelq.NewChannelMessageQueue(c)),在原用通信框架实例的基础上加入缓存功能;

4) 启动一个消息分发go routine(go messageq.DispatchMessage(ctx)),监听云端的事件下发到edge端;

5) 如果设置了websocket启动,就启动websocket服务器的go routine(go servers.StartCloudHub(servers.ProtocolWebsocket, messageq, c)

);

6)如果设置了quic启动,就启动quic服务器的go routine(go servers.StartCloudHub(servers.ProtocolQuic, messageq, c));

7) 如果设置了unix domain socket启动,就启动unix domain socket服务器的go routine(go udsserver.StartServer(util.HubConfig, c))。

需要对以上内容说明的是:

1) websocket server和quic server的功能是相同。也就是说,两者可以选其一,如果条件允许的话,建议选quic server,速度更快一些。

2) unix domain socket是用来与KubeEdgecsi(container storage interface) 通信的。

以上就是CloudCorecloudhub功能模块的剖析,如果读者对cloudhub具体都做了哪些事,是怎么做的感兴趣,可以在本文的基础上自行剖析。

 「未完待续……

点击下方标题可阅读技术文章

「连载」边缘计算(一)01-16:边缘计算系统逻辑架构(原理篇)
「连载」边缘计算(二)01-17:边缘计算系统逻辑架构(原理篇)
「连载」边缘计算(三)01-18:边缘部分原理解析(原理篇)
「连载」边缘计算(四)01-19:边缘部分原理解析(原理篇)
「连载」边缘计算(五)01-22:边缘部分原理解析(原理篇)
「连载」边缘计算(六)01-23:边缘部分原理解析(原理篇)
「连载」边缘计算(七)01-24:边缘部分原理解析(原理篇)
「连载」边缘计算(八)01-25:边缘部分源码(源码分析篇)
「连载」边缘计算(九)01-26:边缘部分源码(源码分析篇)

「连载」边缘计算(十)01-29:边缘部分源码(源码分析篇)
「连载」边缘计算(十一)01-30:边缘部分源码(源码分析篇)
「连载」边缘计算(十二)01-31:边缘部分源码(源码分析篇)
「连载」边缘计算(十三)02-01:边缘部分源码(源码分析篇)
「连载」边缘计算(十四)02-02:边缘部分源码(源码分析篇)

 

相关文章:

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

(接上篇) ChannelContext struct定义如下所示。 KubeEdge/beehive/pkg/core/context/context.go // ChannelContext is object for Context channel type ChannelContext struct { //ConfigFactory goarchaius.ConfigurationFactory channels map[…...

MySQL性能调优篇(8)-NoSQL与MySQL的比较

MySQL数据库是一种关系型数据库,而NoSQL是一种非关系型数据库。它们在数据存储和处理方式、数据模型和可扩展性等方面存在一些明显的差异。本文将对MySQL数据库和NoSQL进行比较,并介绍它们的优势和劣势。 首先,MySQL使用表格的形式来存储数据…...

【Linux学习】线程池

目录 23.线程池 23.1 什么是线程池 23.2 为什么需要线程池 23.3 线程池的应用场景 23.4 实现一个简单的线程池 23.4.1 RAII风格信号锁 23.4.2 线程的封装 23.4.3 日志打印 22.4.4 定义队列中存放Task类任务 23.4.5 线程池的实现(懒汉模式) 为什么线程池中需要有互斥锁和条件变…...

利用Docker部署一个简单的springboot项目

文章目录 1、首先利用docker部署一个redis中间件1.1、下载redis镜像1.2、在主机创建redis挂载的目录和文件1.3、部署redis中间件 2、创建springboot项目2.1、修改application.yml2.2、编写controller2.3、启动应用并测试访问 3、将应用打包成镜像3.1、编写Dockerfile3.2、上传文…...

【Java】纯小白的三种工厂模式基础知识学习笔记

工厂模式概念 在Java中,工厂模式是一种设计模式,用于创建对象而无需指定明确的类。工厂模式通过定义一个共同的接口或抽象类来创建对象,然后由工厂类根据特定条件或参数来实例化具体的对象。 工厂模式通常包括三种类型:简单工厂…...

Spring Boot 笔记 006 创建接口_注册

1.1 由于返回数据都是以下这种格式,那么久再编写一个result实体类 报错了,原因是没有构造方法 可以使用lombok的注解自动生成,添加无参的构造器和全参的构造器 package com.geji.pojo;import lombok.AllArgsConstructor; import lombok.NoArg…...

沁恒CH32V30X学习笔记08---基本定时器超时功能

TIM 基本定时器 高级定时器模块包含一个功能强大的 16 位自动重装定时器(TIM1、TIM8、TIM9 和 TIM10) 通用定时器模块包含一个 16 位可自动重装的定时器(TIM2、TIM3、TIM4 和 TIM5) 基本定时器模块包含一个 16 位可自动重装的定时器(TIM6 和 TIM7) 定时器的结构大致可…...

GitHub | 在 GitHub 上在线展示 Vue 项目

简洁版&#xff1a;上传所有代码 << 构建项目并上传 dist 目录 << 设置仓库 << 访问 Step1&#xff1a;在 GitHub 上新建仓库&#xff0c;并将 Vue 项目的代码 push 到该仓库中。坑点在于&#xff0c;如果你是从 GitHub 上 clone 的别人的项目&#xff0c;那…...

Android的Compose

Jetpack Compose 是用于构建原生 Android 界面的新工具包&#xff0c;无需修改任何 XML 布局&#xff0c;也不需要使用布局编辑器。相反&#xff0c;只需调用可组合函数来定义所需的元素&#xff0c;Compose 编译器即会完成后面的所有工作。 简而言之&#xff0c;使用Compose&…...

C++ STL->list模拟实现

theme: smartblue list list文档 list是可以在常数范围内在任意位置进行插入和删除的序列式容器&#xff0c;并且该容器可以前后双向迭代。list的底层是双向链表结构&#xff0c;双向链表中每个元素存储在互不相关的独立节点中&#xff0c;在节点中通过指针指向 其前一个元素…...

基于python+django+vue.js开发的健身房管理系统

功能介绍 平台采用B/S结构&#xff0c;后端采用主流的Python语言进行开发&#xff0c;前端采用主流的Vue.js进行开发。 功能包括&#xff1a;教练管理、会员管理、场地管理、设备管理、用户管理、日志管理、系统信息模块。 源码地址 https://github.com/geeeeeeeek/python_…...

GPT-4对编程开发的支持

在编程开发领域&#xff0c;GPT-4凭借其强大的自然语言理解和代码生成能力&#xff0c;能够深刻理解开发者的意图&#xff0c;并基于这些需求提供精准的编程指导和解决方案。对于开发者来说&#xff0c;GPT-4能够在代码片段生成、算法思路设计、模块构建和原型实现等方面给予开…...

“成像光谱遥感技术中的AI革命:ChatGPT应用指南“

遥感技术主要通过卫星和飞机从远处观察和测量我们的环境&#xff0c;是理解和监测地球物理、化学和生物系统的基石。ChatGPT是由OpenAI开发的最先进的语言模型&#xff0c;在理解和生成人类语言方面表现出了非凡的能力。本课程重点介绍ChatGPT在遥感中的应用&#xff0c;人工智…...

12.25 校招 实习 内推 面经

绿*泡*泡VX&#xff1a; neituijunsir 交流*裙 &#xff0c;内推/实习/校招汇总表格 1、校招 | 百度2024校园招聘持续热招中 校招 | 百度2024校园招聘持续热招中 2、校招 | 毫末智行2024秋招补录进行时 校招 | 毫末智行2024秋招补录进行时 3、实习丨蔚来2024届冬季实习生计…...

深度学习基础之《TensorFlow框架(3)—TensorBoard》

一、TensorBoard可视化学习 1、TensorFlow有一个亮点就是&#xff0c;我们能看到自己写的程序的可视化效果&#xff0c;这个功能就是TensorBoard 2、TensorFlow可用于训练大规模深度神经网络所需的计算&#xff0c;使用该工具涉及的计算往往复杂而深奥。为了方便TensorFlow程…...

杨氏矩阵和杨辉三角

杨氏矩阵 有一个数字矩阵&#xff0c;矩阵的每行从左到右是递增的&#xff0c;矩阵从上到下是递增的&#xff0c;请编写程序在这样的矩阵中查找某个数字是否存在。 要求&#xff1a;时间复杂度小于O(N); 分析 若要满足要求时间复杂度小于O(N)&#xff0c;就不能每一行一个个…...

PostgreSQL教程(四):高级特性

一、简介 在之前的章节里我们已经涉及了使用SQL在PostgreSQL中存储和访问数据的基础知识。现在我们将要讨论SQL中一些更高级的特性&#xff0c;这些特性有助于简化管理和防止数据丢失或损坏。最后&#xff0c;我们还将介绍一些PostgreSQL扩展。 本章有时将引用教程&#xff0…...

168基于matlab的六自由度并联摇摆台的反解控制算法

基于matlab的六自由度并联摇摆台的反解控制算法&#xff0c;stewart平台&#xff0c;配有GUI界面&#xff0c;可以自定义角度&#xff0c;杆长等参数。设定动平台位姿即能得到电机参数。程序已调通&#xff0c;可直接运行。 168 六自由度并联摇摆台 反解控制算法 (xiaohongshu.…...

MDC 日志跟踪笔记

一、前言 本文主要解析应用中比较实在的一个log4j的链路应用&#xff0c;在经过一段时间的应用后发现还是很稳的&#xff0c;就记录一下这个MDC 代表Mapped Diagnostic Context&#xff08;映射式诊断上下文&#xff09;的情况。 Tisp: 它是一个线程安全的存放诊断日志的容器 T…...

MySQL错误-this is incompatible with sql_mode=only_full_group_by完美解决方案

项目场景 有时候&#xff0c;遇到数据库重复数据&#xff0c;需要将数据进行分组&#xff0c;并取出其中一条来展示&#xff0c;这时就需要用到group by语句。 但是&#xff0c;如果mysql是高版本&#xff0c;当执行group by时&#xff0c;select的字段不属于group by的字段的…...

计算机毕业设计:Python地铁运营可视化平台 Django框架 数据分析 可视化 大数据 机器学习 深度学习(建议收藏)✅

博主介绍&#xff1a;✌全网粉丝50W&#xff0c;前互联网大厂软件研发、集结硕博英豪成立软件开发工作室&#xff0c;专注于计算机相关专业项目实战6年之久&#xff0c;累计开发项目作品上万套。凭借丰富的经验与专业实力&#xff0c;已帮助成千上万的学生顺利毕业&#xff0c;…...

利用drawio高效绘制数据库ER图:从入门到精通

1. 为什么选择drawio绘制数据库ER图 第一次接触数据库设计时&#xff0c;我被各种专业工具的价格和复杂度吓退了。直到发现drawio这个宝藏工具&#xff0c;才真正体会到什么叫"用最简单的工具做专业的事"。作为一款完全免费的跨平台工具&#xff0c;drawio不仅支持网…...

STM32F107单片机驱动Dp83848以太网芯片程序 项目开发用到了Dp83848这一个以...

STM32F107单片机驱动Dp83848以太网芯片程序 项目开发用到了Dp83848这一个以太网芯片&#xff0c;本人发现其配置起来比较麻烦&#xff0c;所以整理了一份STM32F107单片机驱动Dp83848的程序代码例程&#xff0c;方便大家学习相关代码的配置最近在项目里折腾STM32F107和DP83848这…...

第7章 Mosquitto增加SSL/TLS加密通信

第7章 SSL/TLS加密通信 7.1 TLS基础 #mermaid-svg-GnHmiOrEfRuPOevS{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mer…...

Java全栈工程师的面试实战:从技术细节到业务场景

Java全栈工程师的面试实战&#xff1a;从技术细节到业务场景 在一次真实的互联网大厂Java全栈开发岗位的面试中&#xff0c;一位名叫李明的候选人&#xff0c;年龄28岁&#xff0c;拥有计算机科学与技术硕士学历&#xff0c;工作年限为5年。他曾在一家知名的电商公司担任全栈开…...

革命性图像矢量化全攻略:突破像素限制的高效解决方案

革命性图像矢量化全攻略&#xff1a;突破像素限制的高效解决方案 【免费下载链接】vectorizer Potrace based multi-colored raster to vector tracer. Inputs PNG/JPG returns SVG 项目地址: https://gitcode.com/gh_mirrors/ve/vectorizer 在数字设计与开发领域&#…...

2026届最火的五大AI论文工具解析与推荐

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 可采取如下结构化操作指令来降低文本里的人工智能生成特性&#xff0c; 首先&#xff0c;增添…...

华为MateBook X Pro 2020款在Ubuntu系统中提升音质

华为MateBook X Pro 2020款在Ubuntu系统中可以达到相当不错的音质&#xff0c;但需要解决驱动兼容性问题并进行系统优化才能充分发挥其硬件潜力。 硬件音频配置 MateBook X Pro 2020款配备了4个扬声器&#xff08;双高音喇叭双下沉式低音炮&#xff09;&#xff0c;支持杜比全…...

跨平台兼容计算引擎:解锁非NVIDIA GPU的CUDA计算潜能

跨平台兼容计算引擎&#xff1a;解锁非NVIDIA GPU的CUDA计算潜能 【免费下载链接】ZLUDA CUDA on non-NVIDIA GPUs 项目地址: https://gitcode.com/GitHub_Trending/zl/ZLUDA 在高性能计算领域&#xff0c;硬件壁垒常常限制着开发者的创新空间——当你手中的Intel GPU无…...

2026届必备的降AI率助手横评

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 若想切实有效地降低内容的AIGC检测相似度&#xff0c;那就非得从文本生成的起始源头开始着手…...