快速搭建一款鸿蒙分布式分歧终端机原型

子曾经曰过, 有鸿蒙,一切皆有可能

世界上之所以战火不断

冲突加剧

根源就是

分歧得不到公正的裁决

我们小时候都玩过一种游戏

锤子剪刀布

其实那是一种解决分歧

最原始最有效的方法

可是为什么我们长大了以后

就不用这种方法了呢?

因为他有两个弊端

一个是出手的快慢

另一个就是临时变换手型

分歧终端机的问世

一举解决了这个难题

那么,问题来了

这么好的一个跨时代的产品

为什么没有得到推广呢?

因为它有两个弊端:

一个是不方便携带

另一个是……贵(划掉)……不开源

开源的鸿蒙分布式分歧终端机的问世

一举解决了这个问题

那么,构建这样一款鸿蒙分布式分歧终端机**原型**,需要多长时间呢?

10分钟?

不,

大概要……

一个周末吧。

具体需要三个步骤:

第一步,先把家里的娃哄好

第二步,打开电脑写 Bug(划掉)代码

第三步,调试,如果有问题,重复第二步

万事开头难,第一步永远是最难的。

处理好了第一步以后,后两步就简单了,我们来具体分析一下鸿蒙分布式分歧终端机原型的设计原理。

# 鸿蒙分布式分歧终端机原型的设计

## 首先,需求分析

1). 可以**输入**各自的决策

2). 由中立第三方进行**裁决**

3). 可以**查看**最终的裁决**结果**

## 其次,模块划分。

根据需求,利用鸿蒙的分布式设计思想,我们将分歧终端机分为两个核心模块:

1). 分歧终端机的交互模块,简称FA,用于输入决策和查看结果

2). 分歧终端机的计算模块,简称PA,作为中立第三方,做出最终裁决

## 再次,流程。

假定有A和B两人发生分歧,需要解决分歧,那么分歧解决的一个典型流程可以这样子:

1). A 启动分歧终端机的交互模块(FA-A)

2). B 启动分歧终端机的交互模块(FA-B)

3). A 和 B 都连接到同一个分歧终端机计算模块,假定是计算模块A(PA-A)

4). A 和 B 在各自的分歧终端机的交互模块上输入他和她的决策(INPUT-A,INPUT-B)

5). 分歧终端机的计算模块自动根据 A 和 B 的输入,计算出结果:RESULT

6). A 和 B 在各自分歧终端机的交互模块上查看结果RESULT,假如B对结果不满意,可以进行再次裁决,直到她满意为止。

## 再次,详细设计。

### 1. 分歧终端机交互模块(FA)

交互模块需要向使用者提供输入接口和显示界面,所以使用的是鸿蒙的FA,也就是 Feature Ability。

FA 也叫Page Ability,而一个Page可以有多个Ability Slice(能力切片),也就是子页面:

根据决策过程的不同阶段,我们利用Ability Slice设计3个子页面,分别是:

* 1). 初始准备页面 ,HomeSlice,用于连接分歧终端机计算模块(PA)

这里,我们会需要用到鸿蒙分布式软总线的

a). 设备自动发现能力

对于在同一个网络下的鸿蒙设备,在满足条件的情况下,可以自动互相发现,不需要调用网络接口(udp/tcp等),也不需要针对不同的网络状况(wifi/蓝牙/nfc等) 做不同的实现。

b). 设备直连能力

通过connectAbility接口,可以直接连接需要连接的计算模块,不要知道其所在设备的实际网络情况。

* 2).  等待页面 ,WaitingSlice,先加入分歧解决的人,需要在这个页面上等待其他人加入。

当发现所有人都已经加入后,就自动进入下一个页面,也就是“分歧决策页面”。

* 3). 决策页面 ,GameSlice,参与分歧解决的人在这个页面上输入自己的决策,并查看最终的裁决结果。

本模块的 技术要点

1). 子页面之间的切换:使用present方法

2). 决策结果的刷新:可以用计时器来轮询结果,并刷新。

注意 

在计时器中刷新UI时,相关代码需要运行在UI线程上,可以使用EventRunner,参考代码:

文章后续内容和附件可以点击下面的原文链接前往学习

原文链接: https://harmonyos.51cto.com/posts/2216#bkwz

想了解更多内容,请访问:

51CTO和华为官方战略合作共建的鸿蒙技术社区

https://harmonyos.51cto.com/#bkwz

51CTO博文
我还没有学会写个人说明!
上一篇

kafka rebalance解决方案 -incremental cooperative协议和static membership功能

下一篇

Pulsar和Kafka基准测试:Pulsar性能精准解析(完整版)

你也可能喜欢

评论已经被关闭。

插入图片