OpenHarmony的分布式服务框架介绍与实现解析

在这里插入图片描述

OpenHarmony的分布式服务框架是一个用于实现设备间高效协作与资源共享的重要架构,以下是其详细介绍:

框架概述

  • OpenHarmony的分布式服务框架基于分布式软总线、分布式数据管理、分布式Profile等技术特性,构建了统一的分布式服务管理机制,包括服务的发现、同步、注册、调用等功能,支持对跨设备的应用进行远程启动、远程调用、绑定/解绑以及迁移等操作.
  • 它使得不同设备能够像一个整体一样协同工作,打破了设备之间的物理界限,为用户提供更加自然流畅的分布式体验,比如实现多设备协同编辑文档、跨设备投屏等功能.

核心组成部分及源代码说明

设备与服务管理
  • 设备的表示与识别:在代码中,通过特定的结构体来表示设备信息。例如,DeviceInfo结构体定义了设备的各种属性,如设备ID、帐户哈希码、设备类型、设备名称、在线状态等.
typedef struct {char deviceId[DEVICE_ID_LENGTH];char accountHashCode[ACCOUNT_HASH_CODE_LENGTH];DeviceType deviceType;char deviceName[DEVICE_NAME_LENGTH];bool online;int availableConnectionCount;ConnectionAddr connectionInfo;DataBitMap capabilityBitmapArray[MAX_CAPABILITY_BITMAP_COUNT];char customData[MAX_CUSTOM_DATA_LENGTH];int distance;
} DeviceInfo;
  • 服务的注册与发布:设备上的服务通过调用相关函数向框架注册和发布自身。比如,PublishService函数用于发布服务,使得其他设备可以发现该服务,其函数原型如下 :
int PublishService(const char* serviceId, const PublishInfo* publishInfo);

其中,serviceId是服务的唯一标识符,publishInfo是一个包含发布模式、发布介质、发布频率等信息的结构体,用于详细描述服务的发布特性.

远程服务调用
  • 接口定义与实现:定义远程服务接口,供其他设备调用。以一个简单的加法服务为例,其接口定义如下 :
public interface IRemoteService extends IRemoteBroker {int add(int a, int b);
}public class RemoteServiceStub extends RemoteObject implements IRemoteService {public RemoteServiceStub() {super();}@Overridepublic int add(int a, int b) {return a + b;}
}

这里,IRemoteService接口定义了add方法,RemoteServiceStub类实现了该接口,具体实现了加法操作。

  • 代理与通信:为了在不同设备间进行通信,引入服务代理。服务代理负责与远程设备进行通信,并将请求转发给相应的服务提供者。以下是服务代理的部分代码示例 :
public class RemoteServiceProxy implements IRemoteService {private static final String DESCRIPTOR = "example.RemoteService";private OHOSBinder remote;public RemoteServiceProxy(OHOSBinder remote) {this.remote = remote;}@Overridepublic int add(int a, int b) {MessageParcel data = MessageParcel.obtain();MessageParcel reply = MessageParcel.obtain();int result = 0;try {data.writeInt(a);data.writeInt(b);remote.sendRequest(0, data, reply, new MessageOption());result = reply.readInt();} finally {data.reclaim();reply.reclaim();}return result;}@Overridepublic OHOSBinder asObject() {return remote;}
}

RemoteServiceProxyadd方法中,通过MessageParcel来封装请求参数,并使用remote.sendRequest发送请求到远程设备,然后获取并返回响应结果 。

数据传输与同步
  • 数据传输接口:分布式服务框架提供了统一的数据传输接口,用于设备间的数据交互。例如,session.h头文件中声明了创建和删除会话服务器、打开和关闭会话、接收数据和查询基本会话信息等接口.
int CreateSessionServer(const char* sessionName, const SessionServerConfig* config);
int RemoveSessionServer(const char* sessionName);
int OpenSession(const char* sessionName, const ConnectionAddr* peerAddr, Session* session);
int CloseSession(Session* session);
int ReceiveData(Session* session, void* buffer, int bufferLen);
int QuerySessionInfo(Session* session, SessionInfo* info);

这些接口在设备发现其他设备并建立连接后,可用于跨设备传输各种数据,如文本、图像、音频等。

  • 数据同步机制:框架还支持数据的同步操作,确保不同设备上的数据一致性。例如,在分布式数据管理模块中,通过相关的函数和数据结构来实现数据的同步更新,当一处数据发生变化时,能够及时通知并更新到其他相关设备上,具体代码可参考分布式数据管理模块的相关源码,其实现涉及到数据的监听、比对、更新等复杂逻辑,以保证数据在多设备环境下的一致性和完整性.

服务发现与连接

  • 设备发现:利用如CoAP协议等多种通信协议实现设备的自动发现。在discovery_service.h头文件中定义了相关的设备发现函数,如StartDiscoveryStopDiscovery,设备通过调用这些函数来开始或停止发现附近的设备 :
int StartDiscovery(const DiscoveryOption* option);
int StopDiscovery();
  • 连接建立:在发现设备后,会进行安全认证等处理,以确保连接的安全性,然后建立连接链路。连接相关的代码主要在connection模块中,通过一系列函数来管理和维护设备间的连接,如ConnectDevice函数用于发起设备连接操作,其内部实现了连接的建立、参数配置、状态监测等功能.
int ConnectDevice(const char* deviceId, const ConnectionOption* option);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/64946.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网安瞭望台第17期:Rockstar 2FA 故障催生 FlowerStorm 钓鱼即服务扩张现象剖析

国内外要闻 Rockstar 2FA 故障催生 FlowerStorm 钓鱼即服务扩张现象剖析 在网络安全的复杂战场中,近期出现了一个值得关注的动态:名为 Rockstar 2FA 的钓鱼即服务(PhaaS)工具包遭遇变故,意外推动了另一个新生服务 Flo…

抚琴成一快-如何即兴谱例

如何即兴配套谱例 1.即兴01谱例2.即兴02谱例 1.即兴01谱例 2.即兴02谱例 慢推弦,1.5比较合适

uniapp登录

第一步整登录 先整个appid APPID和APPSecret https://developers.weixin.qq.com/community/develop/article/doc/000ca4601b8f70e379febac985b413 一个账号只能整一个小程序 正确流程 调用uni.login https://juejin.cn/post/7126553599445827621 https://www.jb51.net/a…

[python]pymc3-3.11.0安装后测试代码

测试通过环境: pymc33.11.0 python3.8 测试代码: import arviz as az import matplotlib.pyplot as plt import numpy as np import pymc3 as pm RANDOM_SEED 8927 np.random.seed(RANDOM_SEED) az.style.use("arviz-darkgrid") # True p…

基于微信小程序的短视频系统(SpringBoot)+文档

💗博主介绍💗:✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌ 温馨提示:文末有 CSDN 平台官方提供的老师 Wechat / QQ 名片 :) Java精品实战案例《700套》 2025最新毕业设计选题推荐…

深入理解 Linux wc 命令

文章目录 深入理解 Linux wc 命令1. 基本功能2. 常用选项3. 示例3.1 统计文件的行、单词和字符数3.2 仅统计行数3.3 统计多个文件的总和3.4 使用管道统计命令输出的行数 4. 实用案例4.1 日志分析4.2 快速统计代码行数4.3 统计单词频率 5. 注意事项6. 总结 深入理解 Linux wc 命…

DataV的安装与使用(Vue3版本)

1、DataV(vue3)地址:DataV Vue3TSVite版 | DataV - Vue3 2、使用 npm install kjgl77/datav-vue3 安装 3、全局引入。 4、此时就可以按需使用了~

云原生服务网格Istio实战

基础介绍 1、Istio的定义 Istio 是一个开源服务网格,它透明地分层到现有的分布式应用程序上。 Istio 强大的特性提供了一种统一和更有效的方式来保护、连接和监视服务。 Istio 是实现负载平衡、服务到服务身份验证和监视的路径——只需要很少或不需要更改服务代码…

Flutter web - 5 项目打包优化

介绍 目前 flutter 对 web 的打包产物优化较少,存在 main.dart.js 单个文件体积过大问题,打包文件名没有 hash 值,如果有使用 CDN 会存在资源不能及时更新问题。本文章会对这些问题进行优化。 优化打包产物体积 从打包产物中可以看到其中 …

KingbaseES(金仓数据库)入门学习

前言 金仓是一种多进程架构,每一个连接到服务器的会话,在服务器上面都会为该会话分配进程 图形化界面管理 新建数据库名 然后新建一个模式 再创建一个表 新建一个表,然后设置列名 记得要保存 查询数据 也可以新建数据表,用命令…

基于Springboot的数字科技风险报告管理系统

博主介绍:java高级开发,从事互联网行业六年,熟悉各种主流语言,精通java、python、php、爬虫、web开发,已经做了多年的设计程序开发,开发过上千套设计程序,没有什么华丽的语言,只有实…

【大模型】ChatGPT 打造个人专属GPTs助手使用详解

目录 一、前言 二、GPTs介绍 2.1 GPTs是什么 2.2 GPTs工作原理 2.3 GPTs 主要功能 2.4 GPTs 应用场景 2.5 GPTs 优缺点 三、GPTs 创建个人专属应用操作过程 3.1 内置GPTs模板 3.1.1 内置GPTs使用过程 3.2 手动配置方式创建 GPTs 3.2.1 创建过程 3.3 使用对话方式创…

Cobalt Strike 4.8 用户指南-第十四节 Aggressor 脚本

14.1、什么是Aggressor脚本 Aggressor Script 是Cobalt Strike 3.0版及更高版本中内置的脚本语言。Aggressor 脚本允许你修改和扩展 Cobalt Strike 客户端。 历史 Aggressor Script 是 Armitage 中开源脚本引擎Cortana的精神继承者。Cortana 是通过与 DARPA 的网络快速跟踪计…

Vue(四)

1.Vuex 1.1 Vuex是什么 Vuex 是一个插件,可以帮我们管理 Vue 通用的数据。例如:购物车数据、个人信息数据。 1.2 vuex的使用 1.安装 vuex 安装 vuex 与 vue-router 类似,vuex 是一个独立存在的插件,如果脚手架初始化没有选 v…

基础9 CRTP 与 Expression Templates

目录 一、奇异递归模版(CRTP) 二、表达式模板 🍉 概要 🍇 奇异递归模板模式(CRTP) 动机与原理 🍓 表达式模板(Expression Templates) 动机与原理 🍈 示例代码 &#x1f35…

分布式协同 - 分布式事务_TCC解决方案

文章目录 导图Pre流程图2PC VS 3PC VS TCC2PC(Two-Phase Commit,二阶段提交)3PC(Three-Phase Commit,三阶段提交)TCC(Try-Confirm-Cancel)2PC、3PC与TCC的区别2PC、3PC与TCC的联系 导…

脑肿瘤检测数据集,对9900张原始图片进行YOLO,COCO,VOC格式的标注

脑肿瘤检测数据集,对9900张原始图片进行YOLO,COCO,VOC格式的标注 数据集分割 训练组 70% 6930图片 有效集 20% 1980图片 测试集 10% 990图片 预处理 静态裁剪: 24-82&…

步进电机接线和stm32引脚分配

实验设备 24v(12-48 v)直流电源 stm32f103最小系统板 步进电机驱动器 采用混合式二相步进电机J-5718HBS2401-野火42步进电机,驱动器为野火EBF-MSD4805 本人参考接线方式如下: 如上图所示通常采用共阴接线方式,具体…

极乐 15.2.6 | 清爽版简约美观音乐软件,支持网易云歌单导入

极乐是一款使用起来非常轻松的音乐播放软件,它拥有清新简洁的画面,专注于音乐播放功能。最新版本全面升级了64位架构,带来了前所未有的性能提升和更稳定的体验。通过优化内存管理,降低了应用对系统资源的占用,确保设备…

4、mysql高阶语句

mysql高阶语句是对复杂的条件进行查询的操作。 排序—order by 加了desc表示由大到小 1、查询name和score,地址都是云南西路的按id进行由小到大排序 2、查询name和score,先按hobbid进行排序,再把结果按id进行排序 第一段字段必须要有相同的…