




已閱讀5頁(yè),還剩16頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
GRPC課件,課件內(nèi)容GRPC概述為什么要使用GRPCGRPC案例講解,GRPC概述,一、什么是GRPCGRPC是由Google提供的一個(gè)高性能、通用性強(qiáng)的RPC開源框架,它主要面向移動(dòng)應(yīng)用開發(fā)。官網(wǎng):http:/www.grpc.io/,知識(shí)點(diǎn):RPC的實(shí)現(xiàn)思路大同小異,以動(dòng)態(tài)代理為例,定義好接口,用一個(gè)代理假裝實(shí)現(xiàn)了這個(gè)接口(真正的實(shí)現(xiàn)放在服務(wù)端),供客戶端調(diào)用,代理內(nèi)部將該方法調(diào)用封裝成一個(gè)網(wǎng)絡(luò)請(qǐng)求發(fā)送到服務(wù)端。服務(wù)端根據(jù)參數(shù)找到對(duì)應(yīng)的注冊(cè)好的對(duì)象進(jìn)行處理,返回給客戶端。,GRPC概述,以下為GRPC概念圖:,GRPC概述,二、GRPC的特性1、基于HTTP/2協(xié)議標(biāo)準(zhǔn)什么是HTTP/2協(xié)議?HTTP2.0即超文本傳輸協(xié)議2.0,是下一代HTTP協(xié)議(基于二進(jìn)制的傳輸協(xié)議)。是由互聯(lián)網(wǎng)工程任務(wù)組(IETF)的Bis(httpbis)工作小組進(jìn)行開發(fā)。,GRPC概述,HTTP/2的優(yōu)點(diǎn)http2減少了網(wǎng)絡(luò)往返傳輸?shù)臄?shù)量,并且用多路復(fù)用和快速丟棄不需要的流的辦法來(lái)完全避免headoflineblocking(線頭阻塞)的困擾,降低延遲并提高安全性。支持大量并行流,所以即使網(wǎng)站的數(shù)據(jù)分發(fā)在各處也不是問(wèn)題。合理利用流的優(yōu)先級(jí),可以讓客戶端盡可能優(yōu)先收到更重要的數(shù)據(jù)。,GRPC概述,2、GRPC基于強(qiáng)大的IDL(Interfacedescriptionlanguage)GRPC基于ProtoBuf(ProtocolBuffers)定義接口規(guī)范。ProtoBuf是什么?ProtocolBuffers是google提供的一種輕便、高效、簡(jiǎn)單的數(shù)據(jù)存儲(chǔ)語(yǔ)言,可以用于結(jié)構(gòu)化、序列化數(shù)據(jù)。為什么要使用ProtoBuf?適合應(yīng)用場(chǎng)景:它很適合做數(shù)據(jù)存儲(chǔ)或RPC數(shù)據(jù)交換格式??捎糜谕ㄓ崊f(xié)議、數(shù)據(jù)存儲(chǔ)等領(lǐng)域的語(yǔ)言無(wú)關(guān)、平臺(tái)無(wú)關(guān)、可擴(kuò)展的序列化數(shù)據(jù)結(jié)構(gòu)。,GRPC概述,支持語(yǔ)言眾多(提供了完善的API):Proto2提供了C+、Java、Python三種語(yǔ)言的API。目前語(yǔ)言版本Proto3提供了更多的語(yǔ)言支持,包括C+、C#、GO、JAVA、PYTHON。易學(xué)易懂:protoBuf語(yǔ)法非常簡(jiǎn)單,掌握非常容易,便于讀寫。以下為protoBuf的語(yǔ)法例子:官網(wǎng):,GRPC概述,3、GRPC支持眾多開發(fā)語(yǔ)言GRPC目前支持的開發(fā)語(yǔ)言已達(dá)到了10種:C,C+,Java,Go,Node.js,Python,Ruby,Objective-C,PHPandC#。并且GRPC框架已在GitHub上開源。GitHub地址:,GRPC使用案例,2、編譯proto文件編譯有兩種方式:一是在IDE中直接引入protobuf插件來(lái)編譯。二是到官網(wǎng)下載源碼,手工生成protoc編譯器,然后再編譯(不推薦,步驟太繁瑣)。protoBuf官方源碼:,為什么要使用GRPC,1、它使用HTTP2協(xié)議,可復(fù)用鏈接,更充分的利用底層TCP傳輸協(xié)議,并以數(shù)據(jù)流的方式傳輸,比其他基于HTTP1的傳輸速率更高。2、它基于ProtoBuffer語(yǔ)言,對(duì)傳輸數(shù)據(jù)進(jìn)行壓縮、系列化和結(jié)構(gòu)化,易于客戶端與服務(wù)端數(shù)據(jù)的讀寫操作,并使數(shù)據(jù)量傳輸變得更小、傳輸效率更高。3、基于以上及其他特性,使得基于GRPC的客戶端和服務(wù)端更高效的利用流和鏈接,從而有助于節(jié)省寬帶流量、降低鏈接次數(shù)、提高CUP使用效率和電池的使用壽命。,GRPC使用案例,案例、Person的服務(wù)1、通過(guò)ProtoBuf定義接口規(guī)范定義消息體(message)messagePersonstringname=1;int32age=2;messageResponseMessagestringmessage=1;messageQueryPersonRequeststringname=1;,GRPC使用案例,定義服務(wù)接口(service)servicePersonService/AsimpleRPC.rpchello(Person)returns(ResponseMessage)/Aclient-to-serverstreamingRPC.rpcaddPerson(streamPerson)returns(ResponseMessage)/Aserver-to-clientstreamingRPC.rpcgetPersonByName(QueryPersonRequest)returns(streamPerson)/ABidirectionalstreamingRPC.rpcgetAllPerson(streamPerson)returns(streamPerson),GRPC使用案例,2、GRPC服務(wù)端與客戶端實(shí)現(xiàn)簡(jiǎn)單的RPC調(diào)用(不使用流操作)AsimpleRPC.特點(diǎn):服務(wù)器與客戶端的數(shù)據(jù)交互量非常小。服務(wù)端實(shí)現(xiàn)(hello)Overridepublicvoidhello(Personrequest,StreamObserverresponseObserver)responseObserver.onNext(ResponseMessage.newBuilder().setMessage(Hello+request.getName()+,LetsStartLearnGrpc!).build();responseObserver.onCompleted();客戶端實(shí)現(xiàn),GRPC使用案例,客戶端實(shí)現(xiàn)(hello)publicvoidhello()/線程同步控制器CountDownLatchfinishLatch=newCountDownLatch(1);Personperson=Person.newBuilder().setName(Jack).setAge(25).build();StreamObserverresponse=newStreamObserver()OverridepublicvoidonCompleted()finishLatch.countDown();OverridepublicvoidonError(Throwablearg0)finishLatch.countDown();OverridepublicvoidonNext(ResponseMessagemessage)System.out.println(message.getMessage();tryasyncStub.hello(person,response);finishLatch.await(1,TimeUnit.MINUTES);catch(Exceptione)logger.log(Level.WARNING,RPCfailed:0,e.getMessage();,GRPC使用案例,客戶端到服務(wù)器端的單向流Aclient-to-serverstreamingRPC.特點(diǎn):客戶端上傳大量數(shù)據(jù)到服務(wù)端,服務(wù)端返回非常小的數(shù)據(jù)量給客戶端。服務(wù)器端實(shí)現(xiàn)(addPerson)OverridepublicStreamObserveraddPerson(StreamObserverresponseObserver)returnnewStreamObserver()OverridepublicvoidonCompleted()responseObserver.onNext(ResponseMessage.newBuilder().setMessage(OK).build();responseObserver.onCompleted();OverridepublicvoidonError(Throwablearg0)OverridepublicvoidonNext(Personperson)persons.put(person.getName(),person);,GRPC使用案例,客戶端實(shí)現(xiàn)publicvoidaddPerson()CountDownLatchfinishLatch=newCountDownLatch(1);Personperson=Person.newBuilder().setName(Jack).setAge(25).build();StreamObserverresponse=newStreamObserver()OverridepublicvoidonCompleted()finishLatch.countDown();OverridepublicvoidonError(Throwablearg0)finishLatch.countDown();OverridepublicvoidonNext(ResponseMessagemessage)System.out.println(message.getMessage();tryStreamObserverrequest=asyncStub.addPerson(response);request.onNext(person);request.onCompleted();finishLatch.await(1,TimeUnit.MINUTES);catch(Exceptione)logger.log(Level.WARNING,RPCfailed:0,e.getMessage();finally,GRPC使用案例,服務(wù)器端到客戶端的單向流Aserver-to-clientstreamingRPC.特點(diǎn):服務(wù)端返回大量數(shù)據(jù)到客戶端,客戶端上傳非常小的數(shù)據(jù)量給服務(wù)端。服務(wù)器端實(shí)現(xiàn)OverridepublicvoidgetPersonByName(QueryPersonRequestrequest,StreamObserverresponseObserver)responseObserver.onNext(persons.get(request.getName();responseObserver.onCompleted();,GRPC使用案例,客戶端實(shí)現(xiàn)OverridepublicvoidgetPersonByName()CountDownLatchfinishLatch=newCountDownLatch(1);QueryPersonRequestqueryPersonRequest=QueryPersonRequest.newBuilder().setName(Jack).build();StreamObserverresponse=newStreamObserver()OverridepublicvoidonCompleted()finishLatch.countDown();OverridepublicvoidonError(Throwablearg0)finishLatch.countDown();OverridepublicvoidonNext(Personperson)System.out.println(person);tryasyncStub.getPersonByName(queryPersonRequest,response);finishLatch.await(1,TimeUnit.MINUTES);catch(Exceptione)logger.log(Level.WARNING,RPCfailed:0,e.getMessage();,GRPC使用案例,客戶端與服務(wù)器端的雙向流ABidirectionalstreamingRPC.適用場(chǎng)景:客戶端上傳大量數(shù)據(jù)到服務(wù)端,服務(wù)端返回給客戶端的數(shù)據(jù)量也很大。服務(wù)器端實(shí)現(xiàn)OverridepublicStreamObservergetAllPerson(StreamObserverresponseObserver)returnnewStreamObserver()OverridepublicvoidonCompleted()responseObserver.onCompleted();OverridepublicvoidonError(Throwablee)OverridepublicvoidonNext(Personperson)persons.put(person.getName(),person);IteratorpersonIt=persons.values().iterator();while(personIt.hasNext()responseObserver.onNext(personIt.next();,GRPC使用案例,客戶端實(shí)現(xiàn)publicvoidgetAllPerson()CountDownLatchfinishLatch=newCountDownLatch(1);StreamObserverresponse=newStreamObserver()OverridepublicvoidonCompleted()finishLatch.countDown();OverridepublicvoidonError(Throwablearg0)finishLatch.countDown();OverridepublicvoidonNext(Personperson)System.out.println(person);tryStreamObserverrequest=asyncStub.getAllPerson(response);for(inti=0;i5;i+)Personperson=
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 信托在跨境電商物流人才流動(dòng)管理中的應(yīng)用考核試卷
- 機(jī)械化土壤監(jiān)測(cè)技術(shù)智能化發(fā)展路徑分析考核試卷
- 化學(xué)纖維紡織品變形與纖維結(jié)晶度關(guān)系研究考核試卷
- 光電子器件的光學(xué)微環(huán)諧振器考核試卷
- 出租車企業(yè)社會(huì)責(zé)任與城市交通規(guī)劃協(xié)同發(fā)展考核試卷
- 初中生道德教育中價(jià)值觀引導(dǎo)策略研究考核試卷
- 丙綸纖維環(huán)保認(rèn)證的市場(chǎng)推廣與品牌價(jià)值提升考核試卷
- 財(cái)務(wù)報(bào)表在危機(jī)管理中的應(yīng)用考核試卷
- 2025年中國(guó)PC塑膠原料數(shù)據(jù)監(jiān)測(cè)報(bào)告
- 2025年中國(guó)HDPE洗滌用品塑料瓶數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 育嬰員考試題型及答案
- 科室建立血糖管理制度
- 四川成都東方廣益投資有限公司下屬企業(yè)招聘筆試題庫(kù)2025
- 華為公司試用期管理制度
- 保險(xiǎn)合規(guī)知識(shí)課件
- 2025-2030中國(guó)云原生保護(hù)平臺(tái)組件行業(yè)前景趨勢(shì)與投資盈利預(yù)測(cè)報(bào)告
- 商業(yè)大廈機(jī)電系統(tǒng)調(diào)試
- 2025企業(yè)并購(gòu)合同協(xié)議模板
- 【恒順醋業(yè)公司基于杜邦分析的盈利能力淺析14000字論文】
- 電網(wǎng)技術(shù)改造及檢修工程定額和費(fèi)用計(jì)算規(guī)定2020 年版答疑匯編2022
- 2025年生態(tài)文明建設(shè)的考核試卷及答案
評(píng)論
0/150
提交評(píng)論