成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

HarmonyOS分布式協同演奏技術實現路線(Java)

系統 OpenHarmony
本文將重點講述下自由樂隊分布式協同演奏的技術實現路線,重點講的是思路。

??想了解更多關于開源的內容,請訪問:??

??51CTO 開源基礎軟件社區??

??https://ost.51cto.com??

一、寫在前面的話

分布式能力是鴻蒙的一大亮點,不管是分布式數據庫,還是分布式文件管理,抑或是分布式任務流轉,都給我們日常的使用習慣帶來很大的變革。很多時候我就在想,我們還能怎樣應用分布式呢?百思不得其解之時,愛因斯坦的小提琴就莫名其妙地浮現在了腦海里。音樂!一個好的樂隊、好的樂團,不正是由一個個小的部分組成的嗎?于是,自由樂隊就蘊育而出了。

本文將重點講述下自由樂隊分布式協同演奏的技術實現路線,重點講的是思路,講的不好的地方還請大家多多包涵。

二、路線一

采用監聽數據庫的方法實現組網間設備的協同演奏。

#夏日挑戰賽#HarmonyOS分布式協同演奏技術實現路線(Java)-開源基礎軟件社區

主要流程如上圖,核心就是分布式狀態數據庫和分布式音樂演奏數據庫,通過監聽這兩個數據庫實現組網間設備的組隊和協同演奏功能。分布式狀態數據庫用于組隊信息的傳輸,分布式協同演奏數據庫用于樂器模擬按鍵信息的傳輸。

1、分布式音樂演奏數據庫的初始化

如下圖,我們軟件初始化的時候就會創建屬于該設備的DeviceKvStore,并對其進行監聽。

#夏日挑戰賽#HarmonyOS分布式協同演奏技術實現路線(Java)-開源基礎軟件社區

同時,我們在DataAbility里有個deviceKvStores用來保存deviceId和DeviceKvStore的對應關系。

2、判斷是否為本地端

如下圖,我們采用通過intent攜帶的關鍵字來判斷是否為本地端。

#夏日挑戰賽#HarmonyOS分布式協同演奏技術實現路線(Java)-開源基礎軟件社區

本地端調起協同端時,寫入該關鍵字:

#夏日挑戰賽#HarmonyOS分布式協同演奏技術實現路線(Java)-開源基礎軟件社區

3、點擊事件的處理

如下圖,當監聽到點擊事件發生的時候,統一調用DataAbility.clickSound(),為防止阻塞,我們使用異步調用的方式。

#夏日挑戰賽#HarmonyOS分布式協同演奏技術實現路線(Java)-開源基礎軟件社區

而DataAbility.clickSound()則會通過DeviceId獲取到DeviceKvStore,同時將按鍵點擊事件的mSrc(即相應按鍵的ID)寫入。

#夏日挑戰賽#HarmonyOS分布式協同演奏技術實現路線(Java)-開源基礎軟件社區

?4、DeviceKvStore數據庫的監聽

如下圖,首先會判斷是否為本地端,若為本地端則處理點擊事件。處理點擊事件的核心就是獲取到點擊按鍵的mSrc,首先通過notification.getDeviceId()獲取到DeviceId,然后通過DeviceId去獲取響應的DeviceKvStore,然后通過key來拿到mSrc,進而調用DataAbility.playClip()。DataAbility.playClip()就是模擬樂器演奏的相關函數。

#夏日挑戰賽#HarmonyOS分布式協同演奏技術實現路線(Java)-開源基礎軟件社區

?5、分布式狀態數據庫的初始化

#夏日挑戰賽#HarmonyOS分布式協同演奏技術實現路線(Java)-開源基礎軟件社區

6、分布式狀態數據庫的監聽

核心就是獲取此時退出隊伍設備的DeviceId,若當前設備為本地端,則停止對該設備進行監聽,同時彈出該設備退出隊伍的提示;若當前設備為協同端,同時發起退出設備的DeviceId為當前隊伍的本地端,則表示該隊伍已解散,當前設備變為本地端,同時彈出隊伍已解散的提示。

#夏日挑戰賽#HarmonyOS分布式協同演奏技術實現路線(Java)-開源基礎軟件社區

值得一提的是,分布式狀態數據庫是所有設備初始化的時候都通過DataAbility.STATE_KEY來監聽同一個分布式狀態數據庫DeviceKvStore,而分布式音樂演奏數據庫則是每個設備都會根據自己唯一的DataAbility.storeId來創建分布式音樂演奏數據庫DeviceKvStore,也就是說會有多個分布式音樂演奏數據庫。

因此,我們是在DataAbility里通過deviceKvStores來儲存DeviceId和DeviceKvStore的對應關系。組隊的實質就是實現對相應分布式音樂演奏數據庫的監聽。多個DeviceKvStore就能夠實例化多個KvStoreObserver來對多個數據庫進行監聽,并行進行處理,減少并發帶來的影響,降低協同演奏的延時。

7、協同演奏模擬樂器

協同端和本地端一樣,當監聽到點擊事件的時候,也是調用DataAbility.clickSound()。同樣在DataAbility.clickSound()里通過DeviceId獲取DeviceKvStore,然后將按鍵點擊事件的mSrc寫入相應的DeviceKvStore分布式數據庫。

不同的是協同端的KvStoreObserver雖然監聽到了數據變化,但是判斷當前設備為協同端,則不會去進行模擬樂器演奏的播放。而此時,組隊本地端也同時監聽到了數據變化,進而去進行模擬樂器演奏的播放。

三、路線二

我們想到的第二種實現分布式協同演奏的方法就是類似于Codelabs里面的分布式游戲手柄的寫法(鏈接在文末),本地端調起協同端的時候通過IAbilityConnection進行連接。同時,協同端通過proxy.senDataToRemote()將按鍵信息發送給本地端,本地端通過onRemoteRequest()來處理協同端發來的信息。詳細講解可以參考Codelabs里面的代碼,同時有一些包也在Demo里面封裝好了,可以不用重復造輪子。

具體代碼實現我之前測試的時候都寫好了。BUT,因為太卡了,我們就放棄了這條路線,代碼也給回退了。(也可能是我們的水平有限,代碼優化的不是很好)我們當時是先寫的通過訂閱分布式數據庫來實現協同演奏的,但是我最開始是只通過訂閱一個單板本分布式數據庫實現的協同演奏,感覺效果不太理想,就嘗試了路線二。嘗試了之后發現,路線二還沒有之前的延遲小呢,就最終確定了采用路線一,同時后面又對路線一進行了相關的優化,比如采用訂閱分布式狀態數據庫和多個分布式音樂演奏數據庫、異步處理點擊事件、線程阻塞等等技術來降低延遲,最終實現了至少三個設備(當時手上只有三個設備)可以協同演奏一首曲子的程度。

四、總結

協同演奏的實現路線我們研究了兩條,分別是監聽數據庫和直接建立連接。兩者都可以實現功能,但是協同演奏很重要的一點就是延遲,延遲太大就真的只能聽個響了。個人覺得,就目前來看,鴻蒙在分布式減少延遲這塊還是有很長的路要走的。

Codelabs:??分布式游戲手柄(Java)??。

??想了解更多關于開源的內容,請訪問:??

??51CTO 開源基礎軟件社區??

??https://ost.51cto.com??。

責任編輯:jianghua 來源: 鴻蒙社區
相關推薦

2019-10-10 09:16:34

Zookeeper架構分布式

2023-10-26 18:10:43

分布式并行技術系統

2022-06-27 08:21:05

Seata分布式事務微服務

2021-05-28 09:52:00

鴻蒙HarmonyOS應用

2024-01-10 08:02:03

分布式技術令牌,

2019-10-28 10:10:01

技術研發分布式

2017-07-27 14:32:05

大數據分布式消息Kafka

2024-01-08 08:05:08

分開部署數據體系系統拆分

2024-01-09 08:00:58

2018-05-25 13:12:10

UCloud數據庫UDDB

2015-06-17 14:10:34

Redis分布式系統協調

2021-07-22 10:20:21

鴻蒙HarmonyOS應用

2022-01-06 10:58:07

Redis數據分布式鎖

2023-08-21 19:10:34

Redis分布式

2021-10-25 10:21:59

ZK分布式鎖ZooKeeper

2017-09-01 05:35:58

分布式計算存儲

2019-06-19 15:40:06

分布式鎖RedisJava

2023-05-29 14:07:00

Zuul網關系統

2015-05-20 15:54:04

Openstack分布式存儲

2019-05-05 08:37:39

分布式PyTorchGPU
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 最新中文字幕在线 | 超碰在线播 | 国产成人精品一区二区三区四区 | 国产精品视频久久久 | 国产综合精品一区二区三区 | 国产精品无码专区在线观看 | 国产成人一区二区三区精 | 中文字幕一区二区三区日韩精品 | 91国在线 | 亚洲精品一区二区三区免 | 精品国产精品一区二区夜夜嗨 | 日韩欧美二区 | 日韩免费毛片视频 | 国产一区二区三区 | 麻豆一区二区三区 | 欧美1—12sexvideos| 日日碰狠狠躁久久躁96avv | 91看片在线 | 日韩av在线一区 | 精品欧美 | 九九精品在线 | 日韩一区二区在线视频 | 日韩精品一区二区三区在线观看 | 精品国产一区二区三区久久久久久 | 欧美美女爱爱视频 | 天堂资源最新在线 | 免费观看一级特黄欧美大片 | a级片网站 | 欧美午夜精品久久久久久浪潮 | 国产欧美一区二区精品久导航 | 国产激情自拍视频 | 欧美久久久久久久 | 亚洲综合小视频 | 精品欧美一区二区三区精品久久 | 国产精品一区二区久久久久 | 国产成人综合一区二区三区 | 国产成人免费视频网站高清观看视频 | 韩日精品在线观看 | 亚洲欧美综合精品久久成人 | 亚洲黄色在线免费观看 | 成人在线小视频 |