《鴻蒙HarmonyOS網(wǎng)絡(luò)編程》直播答疑
51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)
https://harmonyos.51cto.com/#zz
1. 許老師,3861在STA模式下如何獲取本機(jī)的IP地址,可以修改hostname嗎,就是在路由器上顯示的名稱?
答:可以用Hi3861 SDK提供的netifapi_netif_get_addr接口,獲取本機(jī)的IP地址;
可以用Hi3861 SDK提供的netifapi_set_hostname接口,設(shè)置主機(jī)名稱(路由器配置界面上可以查看到);
2. 今天上課所講的是屬于南向的通信,通過之前的公開課我大概理解了北向開發(fā)之間的實(shí)時(shí)互聯(lián),南北之間實(shí)現(xiàn)實(shí)時(shí)互聯(lián)的一個(gè)邏輯是什么?
答:目前來說,南北向之間的互聯(lián),有兩種實(shí)現(xiàn)方式:
1. 使用鴻蒙的“分布式軟總線”,優(yōu)點(diǎn)是軟總線本身已經(jīng)實(shí)現(xiàn)了設(shè)備發(fā)現(xiàn)、傳輸層安全等特性,可以比較方便的實(shí)現(xiàn)安全、可靠的互聯(lián);限制是,對(duì)端設(shè)備也必須是搭載鴻蒙鴻蒙系統(tǒng)或者HMS Core的Android配備(必須是華為的設(shè)備);
2. 使用傳統(tǒng)的網(wǎng)絡(luò)協(xié)議,例如TCP/UDP/MQTT等;優(yōu)點(diǎn)是,對(duì)端設(shè)備只要支持TCP/IP協(xié)議即可,可以是任意OS,任意形態(tài),不一定是華為設(shè)備,不一定是手機(jī);缺點(diǎn)是,需要開發(fā)者自己實(shí)現(xiàn)設(shè)備發(fā)現(xiàn)、連接管理、傳輸層安全等特性,開發(fā)難度和工作量較大;
3. 請(qǐng)問鴻蒙系統(tǒng)支持以太網(wǎng),WIFI多網(wǎng)絡(luò)共存,是否支持優(yōu)先級(jí)控制?請(qǐng)問支持最新的wifi6嗎?
答:LwIP支持多網(wǎng)口,鴻蒙網(wǎng)絡(luò)協(xié)議棧用的是LwIP,是支持WiFi以太網(wǎng)共存的,比如3516開發(fā)板。目前不支持wifi6。
4. 請(qǐng)問老師剛開始講課時(shí)提到,鴻蒙的API跟海思的API都提供了 wifi不同模式,那么在代碼里面的體現(xiàn)方式有什么不一樣嗎?
答:最直觀的區(qū)別是命名風(fēng)格,鴻蒙API命名是大駝峰,海思API是下劃線。
5. Harmony OS所帶的TCP/IP協(xié)議棧和LwIP的比較?
答:鴻蒙帶的就是LwIP,只不過有一些修改;海思Hi3861下的lwip添加了一些新的接口例如DHCP服務(wù)端等;
liteos-a上的lwip是socket接口的內(nèi)核實(shí)現(xiàn),對(duì)上接口是glibc風(fēng)格的,和其他Unix系統(tǒng)基本一致。
6. 怎樣在hi3516用js寫app,調(diào)用硬件的能力?像上網(wǎng),攝像頭,喇叭?
答:目前開源的openharmony,js引擎使用的JerryScript,使用硬件能力需要:
1. 借助JerryScript的C擴(kuò)展,實(shí)現(xiàn)JS調(diào)用C代碼(具體可以參考JerryScript項(xiàng)目的C擴(kuò)展文檔:https://jerryscript.net/ext-reference-module/,其中最重要的是jerry_create_external_function這個(gè)接口);
2. hi3516上面的話,ace框架對(duì)JerryScript的C擴(kuò)展做了一層封裝,在ace框架的封裝之上實(shí)現(xiàn)擴(kuò)展,相比直接使用JerryScript的C擴(kuò)展要容易一些;
3. 在C擴(kuò)展接口的實(shí)現(xiàn)中,用C語言實(shí)現(xiàn)硬件的訪問和控制;
7. 請(qǐng)問許老師,如果鴻蒙3861控制機(jī)器人,是不是先編寫STA鏈接WIFI,在寫UDP綁定端口得代碼,然后發(fā)送指令?
答:是這樣的思路,具體實(shí)施過程可能需要查閱機(jī)器人相關(guān)的SDK文檔。
8. 請(qǐng)問3861和智能音箱該怎么結(jié)合呢?例如天貓精靈,打開臥室燈光?
答:天貓精靈有SDK,具體信息可以在他們的SDK頁面上了解。
9. 這個(gè)bsd socket跟一般PC上的socket編程有什么不一樣的地方么?
答:一樣的,Socket API最早來源于BSD Unix發(fā)行版,所以也叫BSD Socket。
10. 請(qǐng)問老師,鴻蒙中主要是異步編程嘛?和go的異步模型有什么區(qū)別?
答:鴻蒙支持異步編程,但不是主要的方式;少部分API接口是異步的,大部分是同步的。go的異步是由協(xié)程(goroutine)和管道(channel)實(shí)現(xiàn)的CSP(Communicating Sequential Processes)模型;鴻蒙目前還沒有支持協(xié)程,但是支持進(jìn)程和線程(liteos-a上兩者都支持,liteos-m上只支持線程)。
11. 可以應(yīng)用到物聯(lián)網(wǎng)么?比如農(nóng)業(yè)/畜牧業(yè)?
答:可以的
12. 支持鴻蒙系統(tǒng)4G/5G的開發(fā)板型號(hào)是什么?
答:目前還有沒有支持4G/5G的鴻蒙系統(tǒng)開發(fā)板。
13. 鴻蒙的liteos-a內(nèi)核成熟后會(huì)不會(huì)不再使用linux內(nèi)核?
答:應(yīng)該不會(huì),liteos-a和linux內(nèi)核目標(biāo)設(shè)備的資源等級(jí)不同,linux用來支持系統(tǒng)資源更豐富的芯片平臺(tái),未來一段時(shí)間應(yīng)該是會(huì)并行演進(jìn)的。
14. 鴻蒙跟liteos有什么區(qū)別?
答:鴻蒙是完整的OS,liteos只是內(nèi)核,兩者關(guān)系類似于Linux發(fā)行版(如Debian、Ubuntu)和Linux內(nèi)核的關(guān)系。
15. 鴻蒙OS的開源程度?開源到什么程度,是100%開源嗎?
答:9月10號(hào)的開發(fā)者大會(huì)上有開源路線圖(可以在網(wǎng)上搜到回放),目前不是100%開源,下一步會(huì)開源的是鴻蒙的Linux內(nèi)核。
16. Harmony的優(yōu)先級(jí)范圍,如何處理優(yōu)先級(jí)反轉(zhuǎn)問題?
答:目前l(fā)iteos-m和liteos-a的優(yōu)先級(jí)有32個(gè),最高是0,最低是31;“優(yōu)先級(jí)反轉(zhuǎn)問題”LiteOS里面有優(yōu)先級(jí)繼承來規(guī)避這個(gè)問題,但是應(yīng)用程序使用信號(hào)量之類時(shí)還是需要細(xì)致和小心。
17. 請(qǐng)問老師注冊(cè)的任務(wù)是如何執(zhí)行的?
答:?jiǎn)?dòng)過程中執(zhí)行的,具體源碼解析可以取社區(qū)里面看連志安老師之前發(fā)過一篇帖子。
18. 必須用windows開發(fā)么?可以用linux開發(fā)么?
答:不是必須的,可以用Linux開發(fā),但是目前燒錄工具都是Windows版的,在Linux上需要使用Wine運(yùn)行燒錄工具。
19. HarmonyOS使用什么開發(fā)環(huán)境?
答:南向開發(fā)用的是VSCode + DevEco Device Tool,北向用的是DevEco Studio;
20. 鴻蒙OS能夠?qū)崿F(xiàn)跨端應(yīng)用嗎?
答:可以實(shí)現(xiàn)。
21. 鴻蒙OS開發(fā)應(yīng)用能夠支持熱加載嗎?
答:目前開源的代碼里面還不支持熱加載。
22. 鴻蒙OS開發(fā)應(yīng)用有沒有大小限制?
答:有一定限制,主要受限于內(nèi)核和設(shè)備本身的內(nèi)存閃存等硬件資源,例如目前Hi3516開發(fā)板有1G RAM,內(nèi)核的DDRMEMSIZE 定義的是 512M;Hi3518芯片集成64M RAM,Hi3861芯片集成352 KB SRAM。
23. 鴻蒙OS適合于開發(fā)離線應(yīng)用嗎?
答:可以開發(fā)離線應(yīng)用,但鴻蒙支持分布式特性(分布式軟總線,分布式調(diào)度等),更適合于開發(fā)多端協(xié)同的應(yīng)用。
24. HarmonyOS這用的是什么開發(fā)語言,要如何玩起來,可以用來解決生活中什么問題?
答:南向開發(fā)用的是C/C++,北向開發(fā)用的是Java/JavaScript,可以用在智能家居之類的應(yīng)用場(chǎng)景中。
25. 編譯文件gn和Makefile相比有什么特別之處?
gn是兩階段的構(gòu)建,先gn將.gn文件轉(zhuǎn)為.ninja描述的依賴關(guān)系文件,再用ninja命令執(zhí)行實(shí)際的構(gòu)建過程。
特別之處——gn的語法是C風(fēng)格的(作用域、判斷、循環(huán)等),對(duì)于有C系列語言基礎(chǔ)的程序員更友好。
26. 這個(gè)用的哪些庫?
LwIP —— 一個(gè)輕量級(jí)的TCP/IP協(xié)議棧
51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)
https://harmonyos.51cto.com/#zz