【HarmonyOS】應(yīng)用開發(fā)第十一章-網(wǎng)絡(luò)與多線程_第1頁
【HarmonyOS】應(yīng)用開發(fā)第十一章-網(wǎng)絡(luò)與多線程_第2頁
【HarmonyOS】應(yīng)用開發(fā)第十一章-網(wǎng)絡(luò)與多線程_第3頁
【HarmonyOS】應(yīng)用開發(fā)第十一章-網(wǎng)絡(luò)與多線程_第4頁
【HarmonyOS】應(yīng)用開發(fā)第十一章-網(wǎng)絡(luò)與多線程_第5頁
已閱讀5頁,還剩22頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

第八章HarmonyOS分布式應(yīng)用開發(fā)武漢大學(xué)計算機(jī)學(xué)院趙小剛Http接口調(diào)用數(shù)據(jù)上傳和下載WebSocket連接多線程Http接口調(diào)用訪問網(wǎng)頁內(nèi)容,最簡單的就是http接口調(diào)用模式,這也是和瀏覽器訪問網(wǎng)絡(luò)資源采用的方法一致。使用該接口訪問數(shù)據(jù)的步驟如下:1.引入依賴importhttpfrom'@.http';2.創(chuàng)建HttpRequest對象:該對象里面包括發(fā)起請求、中斷請求、訂閱/取消訂閱HttpResponseHeader事件。每一個HttpRequest對象對應(yīng)一個Http請求。如需發(fā)起多個Http請求,須為每個Http請求創(chuàng)建對應(yīng)HttpRequest對象。lethttpRequest=http.createHttp();HttpRequestOptions3.設(shè)置請求報文參數(shù)HttpRequestOptions參數(shù)類型必填說明methodRequestMethod否請求方式。extraDatastring|Object否發(fā)送請求的額外數(shù)據(jù)。當(dāng)HTTP請求為GET、OPTIONS、DELETE、TRACE、CONNECT等方法時,此字段為HTTP請求的參數(shù)補(bǔ)充,參數(shù)內(nèi)容會拼接到URL中進(jìn)行發(fā)送。當(dāng)HTTP請求為POST、PUT等方法時,此字段為HTTP請求的content。headerObject否HTTP請求頭字段。默認(rèn){'Content-Type':'application/json'}。readTimeoutnumber否讀取超時時間。單位為毫秒(ms),默認(rèn)為60000ms。connectTimeoutnumber否連接超時時間。單位為毫秒(ms),默認(rèn)為60000ms。RequestMethod發(fā)起請求4.發(fā)起http請求:根據(jù)URL地址和相關(guān)配置項,發(fā)起Http網(wǎng)絡(luò)請求,使用callback方式作為異步方法。request(url:string,options:HttpRequestOptions,callback:AsyncCallback<HttpResponse>):voidHttpResponse5.返回結(jié)果HttpResponse:request方法回調(diào)函數(shù)的返回值類型。示例httpRequest.request("/info/1015/65428.htm",{method:'POST',//可選,默認(rèn)為“GET”header:{'Content-Type':'application/json'},extraData:"datatopost",readTimeout:60000,connectTimeout:60000},(err,data)=>{if(!err){('Result:'+data.result);}else{('error:'+err.code);}});Http接口調(diào)用數(shù)據(jù)上傳和下載WebSocket連接多線程數(shù)據(jù)上傳和下載移動應(yīng)用中通常會遇到從指定位置上傳或下載文字,圖片及視頻等。上傳和下載的特點是他們的操作方向基本是相反的,但調(diào)用的函數(shù)基本一致。下載任務(wù)操作步驟如下:1.引入依賴importrequestfrom'@ohos.request';2.開啟下載任務(wù)download(config:DownloadConfig,callback:AsyncCallback<DownloadTask>):voidDownloadConfig數(shù)據(jù)上傳和下載3.訂閱下載進(jìn)度on(type:'progress',callback:(receivedSize:number,totalSize:number)=>void):void;示例代碼importrequestfrom'@ohos.request';exportdefault{data:{downloadTask:{}},onInit(){request.download({url:'/__local/6/77/0C/D9A3FB6FB41B582886E94D06F63_B82B59FD_34A00.jpeg'},(err,data)=>{if(err){console.error('Failedtorequestthedownload.Cause:'+JSON.stringify(err));return;}this.downloadTask=data;});this.downloadTask.on('progress',(upsize,totalsize)=>{console.log('downloadimagesize'+upsize)});}}Http接口調(diào)用數(shù)據(jù)上傳和下載WebSocket連接多線程WebSocket概念WebSocket是HTML5規(guī)范提出的一種協(xié)議,也是基于TCP協(xié)議的,和應(yīng)用層Http協(xié)議是并存的兩種協(xié)議。HTML5WebSockets規(guī)范定義了WebSocketsAPI,支持頁面使用WebSocket協(xié)議與遠(yuǎn)程主機(jī)進(jìn)行全雙工的通信。操作步驟可以在JS中使用WebSocket建立服務(wù)器與客戶端的雙向連接,需要先通過createWebSocket方法創(chuàng)建WebSocket對象,然后通過connect方法連接到服務(wù)器。當(dāng)連接成功后,客戶端會收到open事件的回調(diào),之后客戶端就可以通過send方法與服務(wù)器進(jìn)行通信。當(dāng)服務(wù)器發(fā)信息給客戶端時,客戶端會收到message事件的回調(diào)。當(dāng)客戶端不要此連接時,可以通過調(diào)用close方法主動斷開連接,之后客戶端會收到close事件的回調(diào)。連接ws.connect(defaultIpAddress,(err,value)=>{if(!err){console.log("connectsuccess");}else{console.log("connectfail,err:"+JSON.stringify(err));}});打開并發(fā)送importwebSocketfrom'@.webSocket';vardefaultIpAddress="ws://:8443/v1";letws=webSocket.createWebSocket();ws.on('open',(err,value)=>{console.log("onopen,status:"+value.status+",message:"+value.message);//當(dāng)收到on('open')事件時,可以通過send()方法與服務(wù)器進(jìn)行通信ws.send("Hello,server!",(err,value)=>{if(!err){console.log("sendsuccess");}else{console.log("sendfail,err:"+JSON.stringify(err));}});});接受消息并關(guān)閉ws.on('message',(err,value)=>{console.log("onmessage,message:"+value);//當(dāng)收到服務(wù)器的`bye`消息時(此消息字段僅為示意,具體字段需要與服務(wù)器協(xié)商),主動斷開連接if(value==='bye'){ws.close((err,value)=>{if(!err){console.log("closesuccess");}else{console.log("closefail,erris"+JSON.stringify(err));}});}});Http接口調(diào)用數(shù)據(jù)上傳和下載WebSocket連接多線程多線程概念

進(jìn)程是具有一定獨立功能的程序在某個數(shù)據(jù)集合上的一次運行活動,進(jìn)程是操作系統(tǒng)進(jìn)行資源分配和調(diào)度(CPU,內(nèi)存和I/O)的一個獨立單位。線程是進(jìn)程的一部分,是CPU調(diào)度和分派的基本單位,一個進(jìn)程可以擁有多個線程,它是比進(jìn)程更小的能獨立運行的基本單位。線程自己基本上不擁有系統(tǒng)資源,只擁有一些在運行中必不可少的CPU資源(如程序計數(shù)器,一組寄存器和棧),但是它可與同屬一個進(jìn)程的其他的線程共享進(jìn)程所擁有的全部資源(除了CPU之外的其他資源,如內(nèi)存和I/O)。線程的作用在啟動應(yīng)用時,系統(tǒng)會為該應(yīng)用創(chuàng)建一個稱為“主線程”的執(zhí)行線程。該線程隨著應(yīng)用創(chuàng)建或消失,是應(yīng)用的核心線程。UI界面的顯示和更新等操作,都是在主線程上進(jìn)行。主線程又稱UI線程,默認(rèn)情況下,所有的操作都是在主線程上執(zhí)行。如果需要執(zhí)行比較耗時的任務(wù)(如下載文件、查詢數(shù)據(jù)庫),可創(chuàng)建其他線程來處理。HarmonyOS中線程的實現(xiàn)TaskDispatcher是一個任務(wù)分發(fā)器,它是Ability分發(fā)任務(wù)的基本接口,隱藏任務(wù)所在線程的實現(xiàn)細(xì)節(jié)。TaskDispatcher具有多種實現(xiàn),每種實現(xiàn)對應(yīng)不同的任務(wù)分發(fā)器。在分發(fā)任務(wù)時可以指定任務(wù)的優(yōu)先級,由同一個任務(wù)分發(fā)器分發(fā)出的任務(wù)具有相同的優(yōu)先級。系統(tǒng)提供的任務(wù)分發(fā)器有GlobalTaskDispatcher、ParallelTaskDispatcher、SerialTaskDispatcher、SpecTaskDispatcher。GlobalTaskDispatcher:全局并發(fā)任務(wù)分發(fā)器,由Ability執(zhí)行g(shù)etGlobalTaskDispatcher()獲取。適用于任務(wù)之間沒有聯(lián)系的情況。一個應(yīng)用只有一個GlobalTaskDispatcher,它在程序結(jié)束時才被銷毀。HarmonyOS中線程的實現(xiàn)ParallelTaskDispatcher:并發(fā)任務(wù)分發(fā)器,由Ability執(zhí)行createParallelTaskDispatcher()創(chuàng)建并返回。ParallelTaskDispatcher不具有全局唯一性,可以創(chuàng)建多個。開發(fā)者在創(chuàng)建或銷毀dispatcher時,需要持有對應(yīng)的對象引用。SerialTaskDispatcher:串行任務(wù)分發(fā)器,由Ability執(zhí)行createSerialTaskDispatcher()創(chuàng)建并返回。由該分發(fā)器分發(fā)的所有的任務(wù)都是按順序執(zhí)行,但是執(zhí)行這些任務(wù)的線程并不是固定的。SpecTaskDispatcher:專有任務(wù)分發(fā)器,綁定到專有線程上的任務(wù)分發(fā)器。目前已有的專有線程為UI線程,通過UITaskDispatcher進(jìn)行任務(wù)分發(fā)。UITaskDispatcher是綁定到應(yīng)用主線程的專有任務(wù)分發(fā)器,由Ability執(zhí)行g(shù)etUITaskDispatcher()創(chuàng)建并返回。由該分發(fā)器分發(fā)的所有的任務(wù)都是在主線程上按順序執(zhí)行,它在應(yīng)用程序結(jié)束時被銷毀。同步派發(fā)syncDispatch對同步syncDispatch來說,主線程派發(fā)任務(wù)并在當(dāng)前線程等待任務(wù)執(zhí)行完成。在返回前,當(dāng)前線程會被阻塞。TaskDispatcherglobalTaskDispatcher=getGlobalTaskDispatcher(TaskPriority.DEFAULT);globalTaskDispatcher.syncDispatch(newRunnable(){@Overridepublicvoidrun(){HiL(LABEL_LOG,"synctask1run");}});HiL(LABEL_LOG,"aftersynctask1");globalTaskDispatcher.syncDispatch(newRunnable(){@Overridepublicvoidrun(){HiL(LABEL_LOG,"synctask2run");}});HiL(LABEL_LOG,"aftersynctask2");異步派發(fā)asyncDispatch對異步asyncDispatch來說,主線程派發(fā)任務(wù)后立即返回,返回值是一個可用于取消任務(wù)的接口Revocable。TaskDispatchergl

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論