【HarmonyOS】应用开发第十一章-网络与多线程_第1页
【HarmonyOS】应用开发第十一章-网络与多线程_第2页
【HarmonyOS】应用开发第十一章-网络与多线程_第3页
【HarmonyOS】应用开发第十一章-网络与多线程_第4页
【HarmonyOS】应用开发第十一章-网络与多线程_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第八章HarmonyOS分布式应用开发武汉大学计算机学院赵小刚Http接口调用数据上传和下载WebSocket连接多线程Http接口调用访问网页内容,最简单的就是http接口调用模式,这也是和浏览器访问网络资源采用的方法一致。使用该接口访问数据的步骤如下:1.引入依赖importhttpfrom'@.http';2.创建HttpRequest对象:该对象里面包括发起请求、中断请求、订阅/取消订阅HttpResponseHeader事件。每一个HttpRequest对象对应一个Http请求。如需发起多个Http请求,须为每个Http请求创建对应HttpRequest对象。lethttpRequest=http.createHttp();HttpRequestOptions3.设置请求报文参数HttpRequestOptions参数类型必填说明methodRequestMethod否请求方式。extraDatastring|Object否发送请求的额外数据。当HTTP请求为GET、OPTIONS、DELETE、TRACE、CONNECT等方法时,此字段为HTTP请求的参数补充,参数内容会拼接到URL中进行发送。当HTTP请求为POST、PUT等方法时,此字段为HTTP请求的content。headerObject否HTTP请求头字段。默认{'Content-Type':'application/json'}。readTimeoutnumber否读取超时时间。单位为毫秒(ms),默认为60000ms。connectTimeoutnumber否连接超时时间。单位为毫秒(ms),默认为60000ms。RequestMethod发起请求4.发起http请求:根据URL地址和相关配置项,发起Http网络请求,使用callback方式作为异步方法。request(url:string,options:HttpRequestOptions,callback:AsyncCallback<HttpResponse>):voidHttpResponse5.返回结果HttpResponse:request方法回调函数的返回值类型。示例httpRequest.request("/info/1015/65428.htm",{method:'POST',//可选,默认为“GET”header:{'Content-Type':'application/json'},extraData:"datatopost",readTimeout:60000,connectTimeout:60000},(err,data)=>{if(!err){('Result:'+data.result);}else{('error:'+err.code);}});Http接口调用数据上传和下载WebSocket连接多线程数据上传和下载移动应用中通常会遇到从指定位置上传或下载文字,图片及视频等。上传和下载的特点是他们的操作方向基本是相反的,但调用的函数基本一致。下载任务操作步骤如下:1.引入依赖importrequestfrom'@ohos.request';2.开启下载任务download(config:DownloadConfig,callback:AsyncCallback<DownloadTask>):voidDownloadConfig数据上传和下载3.订阅下载进度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接口调用数据上传和下载WebSocket连接多线程WebSocket概念WebSocket是HTML5规范提出的一种协议,也是基于TCP协议的,和应用层Http协议是并存的两种协议。HTML5WebSockets规范定义了WebSocketsAPI,支持页面使用WebSocket协议与远程主机进行全双工的通信。操作步骤可以在JS中使用WebSocket建立服务器与客户端的双向连接,需要先通过createWebSocket方法创建WebSocket对象,然后通过connect方法连接到服务器。当连接成功后,客户端会收到open事件的回调,之后客户端就可以通过send方法与服务器进行通信。当服务器发信息给客户端时,客户端会收到message事件的回调。当客户端不要此连接时,可以通过调用close方法主动断开连接,之后客户端会收到close事件的回调。连接ws.connect(defaultIpAddress,(err,value)=>{if(!err){console.log("connectsuccess");}else{console.log("connectfail,err:"+JSON.stringify(err));}});打开并发送importwebSocketfrom'@.webSocket';vardefaultIpAddress="ws://:8443/v1";letws=webSocket.createWebSocket();ws.on('open',(err,value)=>{console.log("onopen,status:"+value.status+",message:"+value.message);//当收到on('open')事件时,可以通过send()方法与服务器进行通信ws.send("Hello,server!",(err,value)=>{if(!err){console.log("sendsuccess");}else{console.log("sendfail,err:"+JSON.stringify(err));}});});接受消息并关闭ws.on('message',(err,value)=>{console.log("onmessage,message:"+value);//当收到服务器的`bye`消息时(此消息字段仅为示意,具体字段需要与服务器协商),主动断开连接if(value==='bye'){ws.close((err,value)=>{if(!err){console.log("closesuccess");}else{console.log("closefail,erris"+JSON.stringify(err));}});}});Http接口调用数据上传和下载WebSocket连接多线程多线程概念

进程是具有一定独立功能的程序在某个数据集合上的一次运行活动,进程是操作系统进行资源分配和调度(CPU,内存和I/O)的一个独立单位。线程是进程的一部分,是CPU调度和分派的基本单位,一个进程可以拥有多个线程,它是比进程更小的能独立运行的基本单位。线程自己基本上不拥有系统资源,只拥有一些在运行中必不可少的CPU资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源(除了CPU之外的其他资源,如内存和I/O)。线程的作用在启动应用时,系统会为该应用创建一个称为“主线程”的执行线程。该线程随着应用创建或消失,是应用的核心线程。UI界面的显示和更新等操作,都是在主线程上进行。主线程又称UI线程,默认情况下,所有的操作都是在主线程上执行。如果需要执行比较耗时的任务(如下载文件、查询数据库),可创建其他线程来处理。HarmonyOS中线程的实现TaskDispatcher是一个任务分发器,它是Ability分发任务的基本接口,隐藏任务所在线程的实现细节。TaskDispatcher具有多种实现,每种实现对应不同的任务分发器。在分发任务时可以指定任务的优先级,由同一个任务分发器分发出的任务具有相同的优先级。系统提供的任务分发器有GlobalTaskDispatcher、ParallelTaskDispatcher、SerialTaskDispatcher、SpecTaskDispatcher。GlobalTaskDispatcher:全局并发任务分发器,由Ability执行getGlobalTaskDispatcher()获取。适用于任务之间没有联系的情况。一个应用只有一个GlobalTaskDispatcher,它在程序结束时才被销毁。HarmonyOS中线程的实现ParallelTaskDispatcher:并发任务分发器,由Ability执行createParallelTaskDispatcher()创建并返回。ParallelTaskDispatcher不具有全局唯一性,可以创建多个。开发者在创建或销毁dispatcher时,需要持有对应的对象引用。SerialTaskDispatcher:串行任务分发器,由Ability执行createSerialTaskDispatcher()创建并返回。由该分发器分发的所有的任务都是按顺序执行,但是执行这些任务的线程并不是固定的。SpecTaskDispatcher:专有任务分发器,绑定到专有线程上的任务分发器。目前已有的专有线程为UI线程,通过UITaskDispatcher进行任务分发。UITaskDispatcher是绑定到应用主线程的专有任务分发器,由Ability执行getUITaskDispatcher()创建并返回。由该分发器分发的所有的任务都是在主线程上按顺序执行,它在应用程序结束时被销毁。同步派发syncDispatch对同步syncDispatch来说,主线程派发任务并在当前线程等待任务执行完成。在返回前,当前线程会被阻塞。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");异步派发asyncDispatch对异步asyncDispatch来说,主线程派发任务后立即返回,返回值是一个可用于取消任务的接口Revocable。TaskDispatchergl

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论