快速搭建一款鸿蒙分布式分歧终端机原型
子曾经曰过,有鸿蒙,一切皆有可能。
世界上之所以战火不断
冲突加剧
根源就是
分歧得不到公正的裁决
我们小时候都玩过一种游戏
锤子剪刀布
其实那是一种解决分歧
最原始最有效的方法
可是为什么我们长大了以后
就不用这种方法了呢?
因为他有两个弊端
一个是出手的快慢
另一个就是临时变换手型
分歧终端机的问世
一举解决了这个难题
那么,问题来了
这么好的一个跨时代的产品
为什么没有得到推广呢?
因为它有两个弊端:
一个是不方便携带
另一个是……贵(划掉)……不开源
开源的鸿蒙分布式分歧终端机的问世
一举解决了这个问题
那么,构建这样一款鸿蒙分布式分歧终端机**原型**,需要多长时间呢?
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
https://harmonyos.51cto.com/#bkwz
- 都 2021 年了,Serverless 能取代微服务吗?
- 有啥高大上的,Docker下部署influxdb、Grafana及运行jmeter结果展示,就是这么
- 附029.Kubernetes安全之网络策略
- 搞定这24道JVM面试题,要价30k都有底气~
- wasm runtime 性能测试
- 基于Python的接口自动化-Requests模块
- Service Mesh - Istio服务观测篇
- 【网络工程师路由篇】——OSPF Stub区域(思科模拟器)
- XV6学习 (4)Lab pgtbl
- 干货丨如何水平扩展和垂直扩展DolphinDB集群?
- 【转载】python实现dubbo接口的调用
- 精尽Spring MVC源码分析 - LocaleResolver 组件
- 测试面试LeetCode系列:字符串的左旋转
- 黑/客SQL/注/入入/侵网站实战(1)—成功渗/透台湾某净化设备公司官网
- Python发送多人邮件报错
- Erlang那些事儿第2回之我是模块(module),一文件一模块
- ThreadX——IPC应用之消息队列
- Supervisord远程命令执行漏洞(CVE-2017-11610)复现
- ACL2020 奇葩论文标题大赏
- Longformer:超越RoBERTa,为长文档而生的预训练模型