做旅游網(wǎng)站怎么融資沈陽seo整站優(yōu)化
1.概述
1.1.開源項目的意義
1.2.開源項目對軟件行業(yè)的促進作用
1.3.小結(jié)
2.OpenHarmony
2.1.技術(shù)架構(gòu)
2.2.分布式軟總線
2.2.1.架構(gòu)
2.2.2.代碼介紹
2.2.2.1.代碼目錄
2.2.2.2.說明
2.2.2.3.發(fā)現(xiàn)組網(wǎng)和傳輸?
2.2.2.3.1.發(fā)現(xiàn)
2.2.2.3.2.組網(wǎng)
2.2.2.3.3.傳輸
3.開源地址
1.概述
開源項目(Open Source Project)指的是源代碼公開、用戶可以自由使用、修改和分發(fā)的軟件項目。開源項目通常以某種開源許可證發(fā)布,確保了源代碼的自由使用和傳播。常見的開源許可證包括GNU通用公共許可證(GPL)、MIT許可證、Apache許可證等。
1.1.開源項目的意義
1. 促進創(chuàng)新:開源項目的源代碼是公開的,任何人都可以審視、理解并在其基礎(chǔ)上進行創(chuàng)新和改進。鼓勵了技術(shù)的快速迭代和發(fā)展。
2. 協(xié)同合作:來自世界各地的開發(fā)者可以共同協(xié)作,貢獻(xiàn)他們的技能和知識,從而推進項目的發(fā)展。
3. 教育資源:開源代碼是學(xué)習(xí)編程和軟件開發(fā)的絕佳資源。學(xué)生和新手可以通過閱讀和分析這些代碼來提高自己的編程技巧。
4. 透明性和信任:由于源代碼是公開的,用戶可以檢查代碼中是否存在惡意行為、漏洞或其他問題,從而增加了對軟件的信任度。
5. 降低成本:開源軟件通常是免費的,可以顯著降低企業(yè)和個人的使用成本,同時避免各種專利和版權(quán)糾紛。
1.2.開源項目對軟件行業(yè)的促進作用
1. 加速技術(shù)進步:開源促進了技術(shù)的共享和交流,加速了技術(shù)進步。一些重要的技術(shù)領(lǐng)域,例如操作系統(tǒng)(如Linux)、數(shù)據(jù)庫系統(tǒng)(如MySQL)、編程語言(如Python)、大數(shù)據(jù)平臺(如Hadoop)等,都有大量成功的開源項目。
2. 增強市場競爭:開源項目降低了進入門檻,讓更多的小公司和初創(chuàng)企業(yè)能夠進入市場。推動了整體行業(yè)的進步和創(chuàng)新。
3. 標(biāo)準(zhǔn)化:許多開源項目成為了行業(yè)標(biāo)準(zhǔn),幫助建立和推廣了技術(shù)標(biāo)準(zhǔn),減少了不同系統(tǒng)之間的兼容性問題。
4. 社區(qū)支持和生態(tài)系統(tǒng):強大的開源社區(qū)提供了廣泛的支持和資源,如文檔、論壇和教程,為開發(fā)人員提供了豐富的學(xué)習(xí)材料和解決問題的途徑。
5. 促進開發(fā)者成長:參與開源項目可以幫助開發(fā)者積累實際經(jīng)驗,提升技能,增加曝光和就業(yè)機會。
6. 推動開源商業(yè)模式:雖然開源軟件本身是免費的,但推動了包括技術(shù)支持、咨詢服務(wù)、定制開發(fā)及托管服務(wù)等在內(nèi)的新商業(yè)模式。
1.3.小結(jié)
開源項目不僅貢獻(xiàn)了大量高質(zhì)量的軟件資源,而且還通過打造開放、共享的生態(tài)系統(tǒng),為整個軟件行業(yè)帶來了巨大的活力和創(chuàng)新動力。
2.OpenHarmony
OpenHarmony是由開放原子開源基金會(OpenAtom Foundation)孵化及運營的開源項目,目標(biāo)是面向全場景、全連接、全智能時代、基于開源的方式,搭建一個智能終端設(shè)備操作系統(tǒng)的框架和平臺,促進萬物互聯(lián)產(chǎn)業(yè)的繁榮發(fā)展。
基于OpenHarmony的HarmonyOS總裝機量已經(jīng)超過了8億。HarmonyOS原生應(yīng)用已超過4000。預(yù)計在6月21號的華為開發(fā)者大會上,會發(fā)布HarmonyOS NEXT版,不再兼容安卓應(yīng)用。
另一個具有代表性的OpenHarmony發(fā)行版KaihongOS,是面向全場景的萬物智聯(lián)技術(shù)底座,在OpenHarmony基礎(chǔ)上技術(shù)創(chuàng)新和系統(tǒng)能力增強,深開鴻打造豐富KaihongOS產(chǎn)品矩陣,助力千行百業(yè)數(shù)智化轉(zhuǎn)型,引領(lǐng)行業(yè)變革,構(gòu)建萬物智聯(lián)新時代。是由原華為終端BG軟件部總裁(現(xiàn)任深開鴻CEO)王成錄牽頭打造。
OpenHarmony在GitCode的地址:GitCode - 全球開發(fā)者的開源社區(qū),開源代碼托管平臺
2.1.技術(shù)架構(gòu)
OpenHarmony整體遵從分層設(shè)計,從下向上依次為:內(nèi)核層、系統(tǒng)服務(wù)層、框架層和應(yīng)用層。系統(tǒng)功能按照“系統(tǒng) > 子系統(tǒng) > 組件”逐級展開,在多設(shè)備部署場景下,支持根據(jù)實際需求裁剪某些非必要的組件。OpenHarmony技術(shù)架構(gòu)如下所示:
詳細(xì)介紹可參考第2章的GitCode鏈接。?
2.2.分布式軟總線
這里我們選擇分布式軟總線來進行說明。
分布式軟總線在GitCode的鏈接:GitCode - 全球開發(fā)者的開源社區(qū),開源代碼托管平臺
在現(xiàn)實生活中,設(shè)備之間的通信方式多種多樣,比如WIFI和藍(lán)牙等,這些不同的通信方式在使用上存在較大差異,易導(dǎo)致各種通信問題。此外,還面臨設(shè)備間通信鏈路融合共享以及沖突無法解決等挑戰(zhàn)。分布式軟總線通過實現(xiàn)近場設(shè)備間統(tǒng)一的分布式通信管理能力,提供一種不區(qū)分具體鏈路的設(shè)備發(fā)現(xiàn)、連接、組網(wǎng)和傳輸?shù)耐ㄓ媚芰?。其主要功能如?#xff1a;
1. 發(fā)現(xiàn)連接:提供基于WIFI、藍(lán)牙等多種通信方式的設(shè)備發(fā)現(xiàn)和連接能力。
2. 設(shè)備組網(wǎng):提供統(tǒng)一的設(shè)備組網(wǎng)和拓?fù)涔芾砟芰?#xff0c;確保在數(shù)據(jù)傳輸前已經(jīng)掌握設(shè)備間的連接信息。
3. 數(shù)據(jù)傳輸:支持消息和字節(jié)數(shù)據(jù)傳輸?shù)膶S猛ǖ馈?/p>
通過使用分布式軟總線提供的API,業(yè)務(wù)方可以在設(shè)備間實現(xiàn)高速通信,無需關(guān)注通信的具體細(xì)節(jié),從而能夠更高效地進行業(yè)務(wù)平臺的部署與運行。
2.2.1.架構(gòu)
2.2.2.代碼介紹
2.2.2.1.代碼目錄
/foundation/communication/dsoftbus
├── interfaces # 接口代碼
├── core # 核心代碼
│ ├── common # 通用代碼
│ ├── adapter # 適配層代碼
│ ├── authentication # 認(rèn)證代碼
│ ├── bus_center # 組網(wǎng)代碼
│ ├── connection # 連接代碼
│ ├── discovery # 發(fā)現(xiàn)代碼
│ ├── transmission # 傳輸代碼
│ └── frame # 框架代碼
├── sdk # 運行業(yè)務(wù)進程代碼
│ ├── bus_center # 組網(wǎng)代碼
│ ├── discovery # 發(fā)現(xiàn)代碼
│ ├── transmission # 傳輸代碼
│ └── frame # 框架代碼
└── components # 依賴組件代碼
2.2.2.2.說明
約束:
組網(wǎng)設(shè)備需在同一局域網(wǎng)中。
組網(wǎng)之前,需先完成設(shè)備綁定,綁定流程參見安全子系統(tǒng)中說明。
須知:
使用跨設(shè)備通信時,必須添加權(quán)限ohos.permission.DISTRIBUTED_DATASYNC,該權(quán)限類型為 dangerous 。
設(shè)備主動發(fā)現(xiàn)手機時,手機需打開超級終端的允許被“附近設(shè)備”發(fā)現(xiàn)開關(guān)(設(shè)置-超級終端-我的設(shè)備-允許被發(fā)現(xiàn)-附近設(shè)備),才能被設(shè)備發(fā)現(xiàn)。
2.2.2.3.發(fā)現(xiàn)組網(wǎng)和傳輸?
2.2.2.3.1.發(fā)現(xiàn)
- 發(fā)布流程
a.上層應(yīng)用需要對外發(fā)布自身能力時,調(diào)用服務(wù)發(fā)布接口發(fā)布自身能力。
// 發(fā)布回調(diào)
typedef struct {void (*OnPublishSuccess)(int publishId); //發(fā)布成功時回調(diào)void (*OnPublishFail)(int publishId, PublishFailReason reason);//發(fā)布失敗時回調(diào)
} IPublishCallback;// 發(fā)布服務(wù)
int PublishService(const char *pkgName, const PublishInfo *info, const IPublishCallback *cb);
b.上層應(yīng)用不再需要對外發(fā)布自身能力時,調(diào)用UnpublishService接口注銷服務(wù)。
// 注銷服務(wù)
int UnPublishService(const char *pkgName, int publishId);
- 發(fā)現(xiàn)流程
a.上層應(yīng)用需要發(fā)現(xiàn)特定能力設(shè)備時,調(diào)用發(fā)現(xiàn)接口啟動發(fā)現(xiàn)。
// 發(fā)現(xiàn)回調(diào)
typedef struct {void (*OnDeviceFound)(const DeviceInfo *device); //發(fā)現(xiàn)設(shè)備回調(diào)void (*OnDiscoverFailed)(int subscribeId, DiscoveryFailReason failReason); //啟動發(fā)現(xiàn)失敗回調(diào)void (*OnDiscoverySuccess)(int subscribeId); //啟動發(fā)現(xiàn)成功回調(diào)
} IDiscoveryCallback;// 發(fā)現(xiàn)服務(wù)
int StartDiscovery(const char *pkgName, const SubscribeInfo *info, const IDiscoveryCallback *cb);
b.當(dāng)軟總線發(fā)現(xiàn)到設(shè)備時,通過回調(diào)接口通知業(yè)務(wù)所發(fā)現(xiàn)的設(shè)備信息。
c.上層應(yīng)用不再需要發(fā)現(xiàn)時,調(diào)用StopDiscovery接口停止設(shè)備發(fā)現(xiàn)。
// 停止服務(wù)
int StopDiscovery(const char *pkgName, int subscribeId);
2.2.2.3.2.組網(wǎng)
a.發(fā)起組網(wǎng)請求,攜帶組網(wǎng)連接地址信息,并且提供組網(wǎng)執(zhí)行結(jié)果回調(diào)函數(shù)。
// 組網(wǎng)連接地址
typedef struct {ConnectionAddrType type;union {struct BrAddr {char brMac[BT_MAC_LEN];} br;struct BleAddr {char bleMac[BT_MAC_LEN];} ble;struct IpAddr {char ip[IP_STR_MAX_LEN];int port;} ip;} info;
} ConnectionAddr;// 組網(wǎng)連接地址類型
typedef enum {CONNECTION_ADDR_WLAN = 0,CONNECTION_ADDR_BR,CONNECTION_ADDR_BLE,CONNECTION_ADDR_ETH,CONNECTION_ADDR_MAX
} ConnectionAddrType;// 組網(wǎng)請求執(zhí)行結(jié)果回調(diào)
typedef void (*OnJoinLNNResult)(ConnectionAddr *addr, const char *networkId, int32_t retCode);// 發(fā)起組網(wǎng)請求
int32_t JoinLNN(ConnectionAddr *target, OnJoinLNNResult cb);
b.等待組網(wǎng)結(jié)果,JoinLNN()返回成功表示軟總線接受了組網(wǎng)請求,組網(wǎng)結(jié)果通過回調(diào)函數(shù)通知業(yè)務(wù);組網(wǎng)回調(diào)函數(shù)中addr參數(shù)內(nèi)容和JoinLNN()的入?yún)⒒ハ嗥ヅ?#xff1b;retCode如果為0,表示組網(wǎng)成功,此時networkId為有效值,后續(xù)傳輸、退網(wǎng)等接口均需使用該參數(shù);retCode如果不為0,表示組網(wǎng)失敗,此時networkId為無效值。
c.使用傳輸相關(guān)接口進行數(shù)據(jù)傳輸。
d.發(fā)送退網(wǎng)請求,攜帶組網(wǎng)成功后返回的networkId,并且提供退網(wǎng)執(zhí)行結(jié)果回調(diào)。
// 退網(wǎng)執(zhí)行結(jié)果回調(diào)
typedef void (*OnLeaveLNNResult)(const char *networkId, int32_t retCode);// 退網(wǎng)請求
int32_t LeaveLNN(const char *networkId, OnLeaveLNNResult cb);
e.等待退網(wǎng)完成,OnLeaveLNNResult()的networkId和退網(wǎng)請求接口中的networkId互相匹配;retCode為0表示退網(wǎng)成功,否則退網(wǎng)失敗。退網(wǎng)成功后,networkId變?yōu)闊o效值,后續(xù)不應(yīng)該被繼續(xù)使用。
f.使用節(jié)點(即設(shè)備)注冊和注銷接口,監(jiān)聽網(wǎng)絡(luò)中節(jié)點狀態(tài)變化等事件。
// 事件掩碼
#define EVENT_NODE_STATE_ONLINE 0x1
#define EVENT_NODE_STATE_OFFLINE 0x02
#define EVENT_NODE_STATE_INFO_CHANGED 0x04
#define EVENT_NODE_STATE_MASK 0x07// 節(jié)點信息
typedef struct {char networkId[NETWORK_ID_BUF_LEN];char deviceName[DEVICE_NAME_BUF_LEN];uint16_t deviceTypeId;
} NodeBasicInfo;// 節(jié)點狀態(tài)事件回調(diào)
typedef struct {uint32_t events; // 組網(wǎng)事件掩碼void (*onNodeOnline)(NodeBasicInfo *info); // 節(jié)點上線事件回調(diào)void (*onNodeOffline)(NodeBasicInfo *info); // 節(jié)點下線事件回調(diào)void (*onNodeBasicInfoChanged)(NodeBasicInfoType type, NodeBasicInfo *info); // 節(jié)點信息變化事件回調(diào)
} INodeStateCb;// 注冊節(jié)點狀態(tài)事件回調(diào)
int32_t RegNodeDeviceStateCb(INodeStateCb *callback);// 注銷節(jié)點狀態(tài)事件回調(diào)
int32_t UnregNodeDeviceStateCb(INodeStateCb *callback);
2.2.2.3.3.傳輸
a.創(chuàng)建會話服務(wù),并設(shè)置會話相關(guān)回調(diào),用戶可在回調(diào)中處理打開/關(guān)閉和消息接收事件。
// 會話管理回調(diào)
typedef struct {int (*OnSessionOpened)(int sessionId, int result);void (*OnSessionClosed)(int sessionId);void (*OnBytesReceived)(int sessionId, const void *data, unsigned int dataLen);void (*OnMessageReceived)(int sessionId, const void *data, unsigned int dataLen);
} ISessionListener;// 創(chuàng)建會話服務(wù)
int CreateSessionServer(const char *pkgName, const char *sessionName, const ISessionListener* listener);
b.創(chuàng)建會話 ,用于收發(fā)數(shù)據(jù)。
// 創(chuàng)建會話
int OpenSession(const char *mySessionName, const char *peerSessionName, const char *peerDeviceId, const char *groupId, const SessionAttribute* attr);
?c.通過sessionId向?qū)Χ嗽O(shè)備發(fā)送數(shù)據(jù)。
// 發(fā)送字節(jié)數(shù)據(jù)
int SendBytes(int sessionId, const void *data, unsigned int len);
// 發(fā)送消息數(shù)據(jù)
int SendMessage(int sessionId, const void *data, unsigned int len);
?d.通過sessionId關(guān)閉會話。
// 關(guān)閉會話
void CloseSession(int sessionId);
?e.刪除會話服務(wù)。
// 刪除會話服務(wù)
int RemoveSessionServer(const char *pkgName, const char *sessionName);
3.開源地址
OpenHarmony-GitCode:GitCode - 全球開發(fā)者的開源社區(qū),開源代碼托管平臺
OpenHarmony-OpenAtom Foundation:OpenAtom OpenHarmony
分布式軟總線-GitCode:GitCode - 全球開發(fā)者的開源社區(qū),開源代碼托管平臺?