日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于鴻蒙分布式數(shù)據(jù)服務(wù)開(kāi)發(fā)的聊天室應(yīng)用

OpenHarmony技術(shù)社區(qū) ? 來(lái)源:鴻蒙技術(shù)社區(qū) ? 作者:梁青松 ? 2021-11-15 09:32 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

之前給大家介紹過(guò)《HarmonyOS 分布式之仿抖音應(yīng)用》,此次給大家介紹一下基于鴻蒙分布式數(shù)據(jù)服務(wù)開(kāi)發(fā)的聊天室應(yīng)用,模擬現(xiàn)實(shí)中的聊天室對(duì)話,可以與小伙伴們互動(dòng)、分享自己的故事給小伙伴。

主要知識(shí)點(diǎn)

分布式數(shù)據(jù)服務(wù)

https://developer.harmonyos.com/cn/docs/documentation/doc-guides/database-mdds-guidelines-0000000000030122

官方介紹:分布式數(shù)據(jù)服務(wù)主要實(shí)現(xiàn)用戶設(shè)備中應(yīng)用程序的數(shù)據(jù)內(nèi)容的分布式同步。

當(dāng)設(shè)備 1 上的應(yīng)用 A 在分布式數(shù)據(jù)庫(kù)中增、刪、改數(shù)據(jù)后,設(shè)備 2 上的應(yīng)用 A 也可以獲取到該數(shù)據(jù)庫(kù)變化,總結(jié)一句話:多個(gè)設(shè)備共用一個(gè)數(shù)據(jù)庫(kù)。

主頁(yè)代碼

沒(méi)有特別復(fù)雜的邏輯,主要是分布式數(shù)據(jù)服務(wù)的使用,關(guān)鍵地方都有注釋。
importcom.ldd.myapp.bean.ChatDataBean;
importcom.ldd.myapp.provider.ChatProvider;
importcom.ldd.myapp.util.Tools;
importohos.aafwk.ability.AbilitySlice;
importohos.aafwk.content.Intent;
importohos.agp.components.Button;
importohos.agp.components.ListContainer;
importohos.agp.components.TextField;
importohos.app.Context;
importohos.bundle.IBundleManager;
importohos.data.distributed.common.*;
importohos.data.distributed.user.SingleKvStore;
importohos.utils.zson.ZSONArray;
importohos.utils.zson.ZSONObject;

importjava.util.ArrayList;
importjava.util.List;

importstaticohos.security.SystemPermission.DISTRIBUTED_DATASYNC;

/**
*主頁(yè)
*/
publicclassMainAbilitySliceextendsAbilitySlice{
privateContextmContext;
//聊天列表
privateListContainerlcList;
//聊天數(shù)據(jù)
privatefinalListlistData=newArrayList<>();
//聊天數(shù)據(jù)適配器
privateChatProviderchatProvider;
//輸入框
privateTextFieldtfContent;
//發(fā)送按鈕
privateButtonbtnSend;

//分布式數(shù)據(jù)庫(kù)管理器
privateKvManagerkvManager;
//分布式數(shù)據(jù)庫(kù)
privateSingleKvStoresingleKvStore;
//數(shù)據(jù)庫(kù)名稱(chēng)
privatestaticfinalStringSTORE_NAME="ChatStore";
//存入的列表數(shù)據(jù)key
privatestaticfinalStringKEY_DATA="key_data";
//存入的頭像索引
privatestaticfinalStringKEY_PIC_INDEX="key_pic_index";
privateintpicIndex=0;

@Override
publicvoidonStart(Intentintent){
super.onStart(intent);
super.setUIContent(ResourceTable.Layout_ability_main);
mContext=this;
requestPermission();
initComponent();
initDatabase();
}

/**
*請(qǐng)求分布式權(quán)限
*/
privatevoidrequestPermission(){
if(verifySelfPermission(DISTRIBUTED_DATASYNC)!=IBundleManager.PERMISSION_GRANTED){
if(canRequestPermission(DISTRIBUTED_DATASYNC)){
requestPermissionsFromUser(newString[]{DISTRIBUTED_DATASYNC},0);
}
}
}

/**
*初始化組件
*/
privatevoidinitComponent(){
lcList=(ListContainer)findComponentById(ResourceTable.Id_lc_list);
tfContent=(TextField)findComponentById(ResourceTable.Id_tf_content);
tfContent.setAdjustInputPanel(true);
btnSend=(Button)findComponentById(ResourceTable.Id_btn_send);
btnSend.setEnabled(false);

//初始化適配器
chatProvider=newChatProvider(mContext,listData);
lcList.setItemProvider(chatProvider);

//輸入框內(nèi)容變化監(jiān)聽(tīng)
tfContent.addTextObserver((text,start,before,count)->{
btnSend.setEnabled(text.length()!=0);
});
//點(diǎn)擊發(fā)送按鈕
btnSend.setClickedListener(component->{
Stringcontent=tfContent.getText().trim();
listData.add(newChatDataBean(Tools.getDeviceId(mContext),picIndex,content));
//存入數(shù)據(jù)庫(kù)中
singleKvStore.putString(KEY_DATA,ZSONObject.toZSONString(listData));

//清空輸入框
tfContent.setText("");
});
}

/**
*初始化分布式數(shù)據(jù)庫(kù)
*/
privatevoidinitDatabase(){
//創(chuàng)建分布式數(shù)據(jù)庫(kù)管理器
kvManager=KvManagerFactory.getInstance().createKvManager(newKvManagerConfig(this));

//數(shù)據(jù)庫(kù)配置
Optionsoptions=newOptions();
options.setCreateIfMissing(true)//設(shè)置數(shù)據(jù)庫(kù)不存在時(shí)是否創(chuàng)建
.setEncrypt(false)//設(shè)置數(shù)據(jù)庫(kù)是否加密
.setKvStoreType(KvStoreType.SINGLE_VERSION);//數(shù)據(jù)庫(kù)類(lèi)型
//創(chuàng)建分布式數(shù)據(jù)庫(kù)
singleKvStore=kvManager.getKvStore(options,STORE_NAME);
//監(jiān)聽(tīng)數(shù)據(jù)庫(kù)數(shù)據(jù)改變
singleKvStore.subscribe(SubscribeType.SUBSCRIBE_TYPE_ALL,newKvStoreObserver(){
@Override
publicvoidonChange(ChangeNotificationchangeNotification){
ListinsertEntries=changeNotification.getInsertEntries();
ListupdateEntries=changeNotification.getUpdateEntries();

//第一次存入數(shù)據(jù),獲取insertEntries
if(insertEntries.size()>0){
for(Entryentry:insertEntries){
if(KEY_DATA.equals(entry.getKey())){
//回調(diào)為非UI線程,需要在UI線程更新UI
getUITaskDispatcher().syncDispatch(()->{
listData.clear();
listData.addAll(ZSONArray.stringToClassList(entry.getValue().getString(),ChatDataBean.class));
chatProvider.notifyDataChanged();
lcList.scrollTo(listData.size()-1);
});
}
}
}elseif(updateEntries.size()>0){
for(Entryentry:updateEntries){
if(KEY_DATA.equals(entry.getKey())){
//回調(diào)為非UI線程,需要在UI線程更新UI
getUITaskDispatcher().syncDispatch(()->{
listData.clear();
listData.addAll(ZSONArray.stringToClassList(entry.getValue().getString(),ChatDataBean.class));
chatProvider.notifyDataChanged();
lcList.scrollTo(listData.size()-1);
});
}
}
}
}
});

try{
picIndex=singleKvStore.getInt(KEY_PIC_INDEX);
singleKvStore.putInt(KEY_PIC_INDEX,picIndex+1);
}catch(KvStoreExceptione){
e.printStackTrace();
//沒(méi)有找到,首次進(jìn)入
if(e.getKvStoreErrorCode()==KvStoreErrorCode.KEY_NOT_FOUND){
picIndex=0;
singleKvStore.putInt(KEY_PIC_INDEX,picIndex+1);
}
}
}

@Override
protectedvoidonStop(){
super.onStop();
kvManager.closeKvStore(singleKvStore);
}
}

簡(jiǎn)單案例

config.json 配置:
"reqPermissions":[
{
"reason":"多設(shè)備協(xié)同",
"name":"ohos.permission.DISTRIBUTED_DATASYNC",
"usedScene":{
"ability":[
"MainAbility"
],
"when":"always"
}
},
{
"name":"ohos.permission.DISTRIBUTED_DEVICE_STATE_CHANGE"
},
{
"name":"ohos.permission.GET_DISTRIBUTED_DEVICE_INFO"
},
{
"name":"ohos.permission.GET_BUNDLE_INFO"
}
]

布局頁(yè)面:

<DirectionalLayout
xmlns:ohos="http://schemas.huawei.com/res/ohos"
ohos:height="match_parent"
ohos:width="match_parent"
ohos:alignment="center"
ohos:orientation="vertical">

<Text
ohos:id="$+id:text"
ohos:height="match_content"
ohos:width="match_content"
ohos:text="數(shù)據(jù):0"
ohos:text_size="15fp"/>

<Button
ohos:margin="20vp"
ohos:id="$+id:button"
ohos:height="match_content"
ohos:width="match_parent"
ohos:background_element="$graphic:button_bg"
ohos:padding="10vp"
ohos:text="點(diǎn)擊+1"
ohos:text_color="white"
ohos:text_size="15fp"/>

DirectionalLayout>
MainAbilitySlice 代碼:
importohos.aafwk.ability.AbilitySlice;
importohos.aafwk.content.Intent;
importohos.agp.components.Button;
importohos.agp.components.ListContainer;
importohos.agp.components.Text;
importohos.agp.components.TextField;
importohos.bundle.IBundleManager;
importohos.data.distributed.common.*;
importohos.data.distributed.user.SingleKvStore;
importohos.utils.zson.ZSONArray;

importjava.util.List;

importstaticohos.security.SystemPermission.DISTRIBUTED_DATASYNC;

publicclassMainAbilitySliceextendsAbilitySlice{
//顯示數(shù)據(jù)
privateTexttext;
//分布式數(shù)據(jù)庫(kù)管理器
privateKvManagerkvManager;
//分布式數(shù)據(jù)庫(kù)
privateSingleKvStoresingleKvStore;
//數(shù)據(jù)庫(kù)名稱(chēng)
privatestaticfinalStringSTORE_NAME="MyStore";
//存入的數(shù)據(jù)key
privatestaticfinalStringKEY_COUNT="key_count";

@Override
publicvoidonStart(Intentintent){
super.onStart(intent);
super.setUIContent(ResourceTable.Layout_ability_main);
requestPermission();
initDatabase();
initComponent();
}

/**
*請(qǐng)求分布式權(quán)限
*/
privatevoidrequestPermission(){
if(verifySelfPermission(DISTRIBUTED_DATASYNC)!=IBundleManager.PERMISSION_GRANTED){
if(canRequestPermission(DISTRIBUTED_DATASYNC)){
requestPermissionsFromUser(newString[]{DISTRIBUTED_DATASYNC},0);
}
}
}

/**
*初始化分布式數(shù)據(jù)庫(kù)
*/
privatevoidinitDatabase(){
//創(chuàng)建分布式數(shù)據(jù)庫(kù)管理器
kvManager=KvManagerFactory.getInstance().createKvManager(newKvManagerConfig(this));

//數(shù)據(jù)庫(kù)配置
Optionsoptions=newOptions();
options.setCreateIfMissing(true)//設(shè)置數(shù)據(jù)庫(kù)不存在時(shí)是否創(chuàng)建
.setEncrypt(false)//設(shè)置數(shù)據(jù)庫(kù)是否加密
.setKvStoreType(KvStoreType.SINGLE_VERSION);//數(shù)據(jù)庫(kù)類(lèi)型
//創(chuàng)建分布式數(shù)據(jù)庫(kù)
singleKvStore=kvManager.getKvStore(options,STORE_NAME);
//監(jiān)聽(tīng)數(shù)據(jù)庫(kù)數(shù)據(jù)改變
singleKvStore.subscribe(SubscribeType.SUBSCRIBE_TYPE_ALL,newKvStoreObserver(){
@Override
publicvoidonChange(ChangeNotificationchangeNotification){
ListinsertEntries=changeNotification.getInsertEntries();
ListupdateEntries=changeNotification.getUpdateEntries();

//第一次存入數(shù)據(jù),獲取insertEntries
if(insertEntries.size()>0){
for(Entryentry:insertEntries){
if(KEY_COUNT.equals(entry.getKey())){
//回調(diào)為非UI線程,需要在UI線程更新UI
getUITaskDispatcher().syncDispatch(()->{
intcount=entry.getValue().getInt();
text.setText("數(shù)據(jù):"+count);
});
}
}
}elseif(updateEntries.size()>0){
for(Entryentry:updateEntries){
if(KEY_COUNT.equals(entry.getKey())){
//回調(diào)為非UI線程,需要在UI線程更新UI
getUITaskDispatcher().syncDispatch(()->{
intcount=entry.getValue().getInt();
text.setText("數(shù)據(jù):"+count);
});
}
}
}
}
});

}

/**
*初始化組件
*/
privatevoidinitComponent(){
text=(Text)findComponentById(ResourceTable.Id_text);
Buttonbutton=(Button)findComponentById(ResourceTable.Id_button);

//點(diǎn)擊事件
button.setClickedListener(component->{
try{
intcount=singleKvStore.getInt(KEY_COUNT);
singleKvStore.putInt(KEY_COUNT,count+1);
}catch(KvStoreExceptione){
e.printStackTrace();
//沒(méi)有找到,首次進(jìn)入
if(e.getKvStoreErrorCode()==KvStoreErrorCode.KEY_NOT_FOUND){
intcount=0;
singleKvStore.putInt(KEY_COUNT,count+1);
}
}
});
}
}
注釋比較詳細(xì),主要注意 2 個(gè)點(diǎn):
  • 獲取數(shù)據(jù)時(shí)加入 try catch 塊,處理 key 未找到的情況。

  • 數(shù)據(jù)庫(kù)數(shù)據(jù)改變監(jiān)聽(tīng)回調(diào)是非 UI 線程,如果更新 UI 必須切換到 UI 線程。

以上簡(jiǎn)單案例就是讓你快速掌握分布式數(shù)據(jù)服務(wù):多個(gè)設(shè)備相同的應(yīng)用之間使用同一個(gè)數(shù)據(jù)庫(kù)。 項(xiàng)目地址(需要登錄才能看到演示圖):
https://gitee.com/liangdidi/DistributedChatDemo.git

責(zé)任編輯:haq


聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 數(shù)據(jù)
    +關(guān)注

    關(guān)注

    8

    文章

    7349

    瀏覽量

    95058
  • 鴻蒙系統(tǒng)
    +關(guān)注

    關(guān)注

    183

    文章

    2642

    瀏覽量

    70145
  • HarmonyOS
    +關(guān)注

    關(guān)注

    80

    文章

    2157

    瀏覽量

    36321

原文標(biāo)題:一款鴻蒙分布式聊天室應(yīng)用!

文章出處:【微信號(hào):gh_834c4b3d87fe,微信公眾號(hào):OpenHarmony技術(shù)社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    AI Ceph 分布式存儲(chǔ)教程資料大模型學(xué)習(xí)資料2026

    了成本與性能的最佳平衡,為大規(guī)模在線推理服務(wù)提供了堅(jiān)實(shí)的支撐。 結(jié)語(yǔ) 解鎖大模型基建能力,核心在于構(gòu)建與之匹配的分布式存儲(chǔ)系統(tǒng)。這不僅僅是硬盤(pán)的堆疊,而是一場(chǎng)涉及架構(gòu)設(shè)計(jì)、數(shù)據(jù)算法、網(wǎng)絡(luò)協(xié)議與硬件特性
    發(fā)表于 05-01 17:35

    2022全新版!Java分布式架構(gòu)設(shè)計(jì)與開(kāi)發(fā)實(shí)戰(zhàn)(完結(jié))

    2022全新版!Java分布式架構(gòu)設(shè)計(jì)與開(kāi)發(fā)實(shí)戰(zhàn)(完結(jié)) 分庫(kù)分表實(shí)戰(zhàn):Java海量數(shù)據(jù)存儲(chǔ)架構(gòu)設(shè)計(jì) 在現(xiàn)代互聯(lián)網(wǎng)應(yīng)用中,隨著業(yè)務(wù)規(guī)模的指數(shù)級(jí)增長(zhǎng),數(shù)據(jù)庫(kù)性能瓶頸已成為制約系統(tǒng)發(fā)展的
    發(fā)表于 03-30 15:20

    TiDB分布式數(shù)據(jù)庫(kù)運(yùn)維實(shí)踐

    TiDB 是 PingCAP 開(kāi)發(fā)的開(kāi)源分布式關(guān)系型數(shù)據(jù)庫(kù),兼容 MySQL 5.7 協(xié)議,底層存儲(chǔ)基于 TiKV(分布式 KV 存儲(chǔ))和 RocksDB。它解決的核心問(wèn)題是:當(dāng)單機(jī)
    的頭像 發(fā)表于 03-04 15:44 ?350次閱讀

    SC-3568HA:解鎖鴻蒙全權(quán)限API與分布式能力的工業(yè)控制平臺(tái)

    傳統(tǒng)嵌入式開(kāi)發(fā)面臨硬件碎片化、高權(quán)限功能缺失、分布式協(xié)同復(fù)雜及自動(dòng)化測(cè)試不足等痛點(diǎn)。SC-3568HA開(kāi)發(fā)板基于鴻蒙系統(tǒng),通過(guò)統(tǒng)一內(nèi)核抽象層和硬件驅(qū)動(dòng)框架解決兼容問(wèn)題,開(kāi)放全量系統(tǒng)AP
    的頭像 發(fā)表于 12-18 11:27 ?7623次閱讀
    SC-3568HA:解鎖<b class='flag-5'>鴻蒙</b>全權(quán)限API與<b class='flag-5'>分布式</b>能力的工業(yè)控制平臺(tái)

    深入理解分布式共識(shí)算法 Raft

    “不可靠的網(wǎng)絡(luò)”、“不穩(wěn)定的時(shí)鐘”和“節(jié)點(diǎn)的故障”都是在分布式系統(tǒng)中常見(jiàn)的問(wèn)題,在文章開(kāi)始前,我們先來(lái)看一下:如果在分布式系統(tǒng)中網(wǎng)絡(luò)不可靠會(huì)發(fā)生什么樣的問(wèn)題。 有以下 3 個(gè)服務(wù)構(gòu)成的分布式
    的頭像 發(fā)表于 11-27 14:51 ?470次閱讀
    深入理解<b class='flag-5'>分布式</b>共識(shí)算法 Raft

    如何解決分布式光伏計(jì)量難題?

    %。同時(shí),可提升發(fā)電效率、降低發(fā)電成本的新型技術(shù)逐步落地,推動(dòng)光伏系統(tǒng)向更高效、更緊湊的方向發(fā)展,進(jìn)而對(duì)電表在精度、數(shù)據(jù)更新速度及適配性方面也提出了更高要求。 分布式光伏遇計(jì)量難題 分布式光伏常用 “自己發(fā)的電自己用,用不完的賣(mài)
    的頭像 發(fā)表于 11-07 14:55 ?441次閱讀
    如何解決<b class='flag-5'>分布式</b>光伏計(jì)量難題?

    【節(jié)能學(xué)院】Acrel-1000DP分布式光伏監(jiān)控系統(tǒng)在奉賢平高食品 4.4MW 分布式光伏中應(yīng)用

    分布式光伏本地和遠(yuǎn)程通信方案,并研究分布式光伏采集模型的構(gòu)建、多源數(shù)據(jù)融合估計(jì)、面向分布式光伏的有功、無(wú)功功率優(yōu)化控制等關(guān)鍵技術(shù),實(shí)現(xiàn)了對(duì)小容量工商業(yè)
    的頭像 發(fā)表于 08-23 08:04 ?3692次閱讀
    【節(jié)能學(xué)院】Acrel-1000DP<b class='flag-5'>分布式</b>光伏監(jiān)控系統(tǒng)在奉賢平高食品 4.4MW <b class='flag-5'>分布式</b>光伏中應(yīng)用

    分布式光伏發(fā)電監(jiān)測(cè)系統(tǒng)技術(shù)方案

    分布式光伏發(fā)電監(jiān)測(cè)系統(tǒng)技術(shù)方案 柏峰【BF-GFQX】一、系統(tǒng)目標(biāo) :分布式光伏發(fā)電監(jiān)測(cè)系統(tǒng)旨在通過(guò)智能化的監(jiān)測(cè)手段,實(shí)現(xiàn)對(duì)分布式光伏電站的全方位、高精度、實(shí)時(shí)化管理。該系統(tǒng)能
    的頭像 發(fā)表于 08-22 10:51 ?3510次閱讀
    <b class='flag-5'>分布式</b>光伏發(fā)電監(jiān)測(cè)系統(tǒng)技術(shù)方案

    開(kāi)鴻開(kāi)發(fā)板深度體驗(yàn):從開(kāi)源鴻蒙開(kāi)發(fā)到AI場(chǎng)景實(shí)踐

    的KaihongBoard-3588S-SBC和KaihongBoard-3576-SBC被評(píng)為“2025OpenHarmony明星開(kāi)發(fā)板”,可實(shí)現(xiàn)設(shè)備快速開(kāi)源鴻蒙化升級(jí)、分布式互聯(lián)協(xié)同、彈性部署等能力。
    的頭像 發(fā)表于 07-03 17:03 ?2026次閱讀
    開(kāi)鴻<b class='flag-5'>開(kāi)發(fā)</b>板深度體驗(yàn):從開(kāi)源<b class='flag-5'>鴻蒙</b><b class='flag-5'>開(kāi)發(fā)</b>到AI場(chǎng)景實(shí)踐

    鴻蒙5開(kāi)發(fā)寶藏案例分享---一多開(kāi)發(fā)實(shí)例(音樂(lè))

    各位開(kāi)發(fā)者小伙伴們好呀!今天咱們來(lái)點(diǎn)硬核干貨!最近在鴻蒙文檔中心挖到一座“金礦”——官方竟然暗藏了100+實(shí)戰(zhàn)案例,從分布式架構(gòu)到交互動(dòng)效優(yōu)化應(yīng)有盡有!這些案例不僅藏著華為工程師的私房技巧,還直接
    的頭像 發(fā)表于 06-30 11:54 ?874次閱讀

    vsan數(shù)據(jù)恢復(fù)—vsan分布式服務(wù)器節(jié)點(diǎn)上raid數(shù)據(jù)恢復(fù)案例

    4臺(tái)服務(wù)器基于vsan分布式架構(gòu)的組建一個(gè)集群。每臺(tái)節(jié)點(diǎn)服務(wù)器上有2組由6塊硬盤(pán)組建的raid磁盤(pán)陣列,上層存放虛擬機(jī)文件。 某一個(gè)服務(wù)器節(jié)點(diǎn)上有一塊硬盤(pán)離線,vsan的
    的頭像 發(fā)表于 06-18 12:29 ?689次閱讀

    鴻蒙5開(kāi)發(fā)寶藏案例分享---應(yīng)用接續(xù)提升內(nèi)容發(fā)布體驗(yàn)

    : [distributedAsset] // 關(guān)鍵!這里放的是分布式文件引用 }); // 激活數(shù)據(jù)同步(相當(dāng)于啟動(dòng)數(shù)據(jù)快遞服務(wù)) this.distributedObject.s
    發(fā)表于 06-03 18:25

    鴻蒙5開(kāi)發(fā)寶藏案例分享---一多開(kāi)發(fā)實(shí)例(游戲)

    十年前藏的現(xiàn)金一樣驚喜?。┻@些藏在文檔深處的\"武功秘籍\",能幫我們輕松實(shí)現(xiàn)分布式游戲、跨端協(xié)同這些聽(tīng)起來(lái)很酷的功能??焐宪?chē),帶你解鎖鴻蒙開(kāi)發(fā)的正確姿勢(shì)! 一、分布式游戲手柄
    發(fā)表于 06-03 18:22

    曙光存儲(chǔ)領(lǐng)跑中國(guó)分布式存儲(chǔ)市場(chǎng)

    近日,賽迪顧問(wèn)發(fā)布《中國(guó)分布式存儲(chǔ)市場(chǎng)研究報(bào)告(2025)》,指出2024 年中國(guó)分布式存儲(chǔ)市場(chǎng)首次超過(guò)集中式存儲(chǔ),規(guī)模達(dá) 198.2 億元,增速 43.7%。
    的頭像 發(fā)表于 05-19 16:50 ?1489次閱讀

    分布式光伏電力問(wèn)題層出不窮?安科瑞分布式光伏運(yùn)維系統(tǒng)來(lái)“救場(chǎng)”

    一、分布式光伏電力運(yùn)維,痛點(diǎn)大揭秘? ? 分布式光伏作為實(shí)現(xiàn)綠色能源轉(zhuǎn)型的關(guān)鍵一環(huán),近年來(lái)在我國(guó)得到了迅猛發(fā)展。國(guó)家能源局數(shù)據(jù)顯示,截至 2023 年底,中國(guó)分布式光伏電站累計(jì)并網(wǎng)容量
    的頭像 發(fā)表于 05-07 17:14 ?1119次閱讀
    <b class='flag-5'>分布式</b>光伏電力問(wèn)題層出不窮?安科瑞<b class='flag-5'>分布式</b>光伏運(yùn)維系統(tǒng)來(lái)“救場(chǎng)”
    株洲市| 石河子市| 昌邑市| 浙江省| 慈溪市| 高州市| 稻城县| 岳阳县| 张家界市| 涡阳县| 项城市| 左权县| 四川省| 阜阳市| 太保市| 夏邑县| 和田市| 康保县| 九寨沟县| 荃湾区| 乌拉特后旗| 景德镇市| 阿勒泰市| 长治县| 翁源县| 咸宁市| 南乐县| 武隆县| 拉孜县| 岳池县| 甘德县| 昌黎县| 财经| 道孚县| 上饶市| 光山县| 临夏县| 长岭县| 大邑县| 卓尼县| 灵丘县|