润小云解读鸿蒙OS系列(一):分布式软总线概览

拈花ヽ惹草 提交于 2020-11-11 19:49:14

当年思过崖上,令狐冲苦战田伯光,幸得风老前辈指引:你先使一招‘白虹贯日’,跟着便使‘有凤来仪’,再使一招‘金雁横空’,接下来使‘截剑式’……一口气滔滔不绝的说了三十招招式。那三十招招式令狐冲都曾学过,连贯起来却何其复杂,还好有风老前辈指导,摆脱拘泥不化,融会贯通,终悟独孤九剑。

 

 

如今的IT设备种类繁多,客厅的电视,墙上的摄像头,手心的手机,耳朵里的蓝牙耳机,手腕上的智能手表,桌上的电脑;它们可以独立工作,也可以用某种方式进行相互连接;但如果希望它们协同工作,发挥出更大的威力,就要颠覆传统的观念,用新的视角来理解它们;现在想法有了,招式也有了(各IT设备),缺的是融合;华为的鸿蒙OS便为此而生,其中的分布式软总线模块,便是剑法心经。

无招胜有招,有了分布式软总线的加持,我们名下的这些设备可以实现无缝互联,对于用户而言,无论设备在哪,以什么方式进行接入,之间如何互通,这些复杂的逻辑由鸿蒙搞定,无视距离和协议的界限,即可以最简单的方式,高效、安全地进行数据交互。

 

 

同时在鸿蒙OS的体系中,分布式软总线也是另外两大绝学 - 分布式数据管理和分布式任务调度的基石;因此学习和理解分布式软总线,也是深入了解整个鸿蒙OS不错的入口。

      

 

鸿蒙OS代码已逐步开源,下载源码并非难事;分布式软中线代码仓库地址如下:

  • communication_interfaces_kits_softbuskit_lite

https://gitee.com/openharmony/communication_interfaces_kits_softbuskit_lite

  • communication_services_softbus_lite

https://gitee.com/openharmony/communication_services_softbus_lite

顾名思义,分别对应它的接口和实现;而communication_services_softbus_lite源码结构中,又分为authmanager、discovery、trans_service、 和为兼容系统差别而生的os_adapter四大目录。

 

authmanager提供设备认证机制和设备知识库管理,当发现有请求时,调用ProcessDataEvent函数,收包,检验包头,根据数据包的类型确定不同的处理方式。类型主要包括以下三种:

  1. MODULE_AUTH_SDK     加密数据类型
  2. MODULE_TRUST_ENGINE 可信类型,直接进行数据传输
  3. MODULE_CONNECTION  进行ip及设备认证

authmanager源码结构及功能概述如下:

  • auth_conn.c

提供发送、接收、认证、获取秘钥功能;

  • auth_interface.c

管理各个会话节点、各个链接节点、各个秘钥节点,提供包括增删改查等功能;

  • msg_get_deviceid.c

提供以cJSON格式获取各个设备的信息,包括设备id、链接信息、设备名、设备类型等;

  • bus_manager.c

主要通过deviceIp创建两个不同的listen,主要用来监听系统上有哪些device及新的device节点的创建;其中有两个回调函数OnConnectEvent和OnDataEvent,分别是用来处理设备节点的基本操作及节点数据的处理;

  • wifi_auth_manager.c

主要实现了连接管理和数据接收功能。连接管理包括连接的建立、断开及连接的查找。数据接收包括数据获取、包头及包长等的校验,并且为了简化包头数据读取,单独实现了对一个int型和一个long型数据的接收函数;

 

discover,它是一种基于coap协议的设备发现机制,为什么选择coap协议?

因为物联网设备的ram,rom都通常非常小,运行TCP和HTTP是不可以接受的。而coap(Constrained Application Protocol、受限应用协议)是一种在物联网世界的类web协议,顾名思义,可以使用在资源受限的物联网设备上。

它支持可靠传输的轻量化协议。discover的设备发现功能就是用的这个特性。

discovery 代码包含coap和discovery_service两部分,coap部分是coap协议封装实现,discovery_service 是基于coap协议设备的发现流程实现。

discovery的实现前提是确保发现端设备与接收端设备在同一个局域网内且能互相收到对方的报文。大致流程是:

  1. 发现端设备,使用coap协议在局域网内发送广播;
  2. 接收端设备使用PublishService接口发布服务,接收端收到广播后,发送coap协议单播给发现端;
  3. 发现端设备收到报文会更新设备信息。

 

trans_service目录中的代码提供身份验证和传输通道。它主要封装了socket、cJSON、线程锁接口,实现了用户的创建、监听、会话管理,以及设备、指令、数据等信息的获取,最终提供加密和解密传输两种传输通道。

trans_service源码结构及功能概述如下:

  • auth_conn_manager.c

用户创建,监听,连接等服务管理;

  • tcp_session_manager.c

会话管理;

  • trans_lock.c

互斥锁初始化以及互斥锁资源获取与释放;

  • aes_gcm.c

提供加密传输和解密传输接口;

  • messages.c

用于获取以cJSON格式管理的设备(包括设备名、设备类型、设备ID等)、指令、数据、会话(包括用户端口、会话端口等)等信息;

  • tcp_socket.c

端口号管理以及数据传输管理。

欢迎扫码关注润小云的微信公众号。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!