赞
踩
1.1
总线是一种内部结构,在计算机系统中,主机的各个部件通过总线相连,外部设备通过相应的接口电路与总线连接,是计算机各个部件CPU,内存,输入输出设备传递信息的公共通路,总线可分为数据总线、地址总线和控制总线
1.2
鸿蒙的分布式软总线让多个设备互联融合,带来设备内和设备间的高吞吐,低延时的流畅通讯
1.3
鸿蒙分布式软总线致力于实现短距离内的设备统一的分布式通信能力,通过统一的设备发现服务和传输接口,实现数据和任务的高效传输和分配。
1.4
基于网络互联交互的系统,不同设备之间的传输协议和数据标准并不一致,而鸿蒙系统设定的分布式开发模式中,无需关心网络协议组网方式,仅需要监听设备上下线
1.5
采用异构网络组网的方式,解决不同设备之间不同协议交互的问题。具体步骤:设备上线向网络层注册---->网络层与设备建立通道连接---->监测设备的状态----->网络层对设备的上线下线进行管理----->上线的设备之间可以建立连接进行服务
1.6
提供统一的基于session的认证传输功能,通过sessionId实现数据的收发
1.7
COAP协议属于一种应用层协议,用于保持低开销的一个通用的WEB协议,用DTLS加密实现其安全性
1.8
由于各种设备的操作系统不尽相同,所以鸿蒙系统内部各个模块使用的函数需要支持针对不同版本平台的适配,针对不同的硬件设备,组成最适合该设备的OS,在源代码的解读过程中也能发现针对不同操作系统平台的条件编译的函数
1.9
设备的认证管理
两套通信的方法:
1 公钥协商会话密钥
2 使用会话密钥加密通信数据
当建立信任关系的主控设备与设备间在进行通信时,双方首先完成信任关系绑定,然后基于存储在本地的对端身份公钥相互进行认证;在每次通信时完成双向身份认证以及会话密钥协商,之后设备使用此会话密钥来解密双方设备间的传输通道
思维导图疏导分布式软总线的文件架构
这里简单总结几个重要的分布式软总线中的功能实现
//初始化的三个状态:开始->进行中->完成
enum {
NSTACKX_INIT_STATE_START = 0,
NSTACKX_INIT_STATE_ONGOING,//1
NSTACKX_INIT_STATE_DONE,//2
};
具体流程:首先判断初始化状态,为START时将其变为ONGOING然后执行两个初始化函数,初始化失败则调用初始化删除函数并返回EFAILED,并将全局变量变回START,初始化成功则将STATE改为DONE并返回EOK
2. int CoapInitDiscovery(void)
整个发现服务的初始化和各种线程建立和新设备接入时的数据接收与发送
整个流程在图中较为清晰的展现出来,这里再简单将流程总结一下:首先建立本设备的套接字,创建WiFi消息队列,用于接受WiFi相关信息,创建IP队列用于接收新接入设备的IP地址,然后建立一个消息线程创立监听线程调用线程处理函数在readSet中维护一个可用套接字的集合,然后为每个线程监听接受的数据,进行解码和保持并创建响应的UDP客户端进行数据的反馈
int PublishService()
所有服务的开启由服务发布函数开始
整个分布式软总线的最初的发布服务的函数,这里简单概况一下整个流程:首先检查是否有调用软总线的权限,然后申请互斥锁开始对数据的修改,调用初始化服务函数将设备信息保存,开启WiFi监听并开启软总线工作,建立服务并启动多个线程同时工作,用于数据的收发,将相关信息保存入队列并进行登记,然后将发布模式的信息进行登记保存完成服务的发布
WifiEventTrigger()
BusManager()
StartSession()
StartListener()
4567对应的函数详细讲解放在前面的博客中,这里不赘述放上链接,感兴趣的小伙伴可以点击阅读
WifiEventTrigger()相关函数详细讲解
通过几天的源码阅读与理解,大致理清了鸿蒙分布式软总线模块的服务构建模式:
1.严密的安全认证,参数缺失和返回值的各种情况的处理都十分完备
2.通过层层封装函数对参数进行校验,对返回值进行校验,对不同的情况进行处理
3.针对不同的操作系统通过条件编译了不同的函数去适配其模式
4.四个模块彼此独立又彼此相连,为设备的连接与通信提供了底层功能支持
5.纯C语言编写,双向链表的使用,各种类库的使用和动态编译,都为其运行速度立下汗马功劳
6.大多数函数功能通过函数名就可得知,所有的变量命名和代码书写都符合规范,值得学习
7.通过多线程和互斥锁的调度,使得服务的高效运行,让多设备的通信更加高效
感谢阅读点赞和评论
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。