




已閱讀5頁,還剩16頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
GRPC課件,課件內(nèi)容GRPC概述為什么要使用GRPCGRPC案例講解,GRPC概述,一、什么是GRPCGRPC是由Google提供的一個(gè)高性能、通用性強(qiáng)的RPC開源框架,它主要面向移動(dòng)應(yīng)用開發(fā)。官網(wǎng):http:/www.grpc.io/,知識點(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ò)請求發(fā)送到服務(wù)端。服務(wù)端根據(jù)參數(shù)找到對應(yīng)的注冊好的對象進(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ù)用和快速丟棄不需要的流的辦法來完全避免headoflineblocking(線頭阻塞)的困擾,降低延遲并提高安全性。支持大量并行流,所以即使網(wǎng)站的數(shù)據(jù)分發(fā)在各處也不是問題。合理利用流的優(yōu)先級,可以讓客戶端盡可能優(yōu)先收到更重要的數(shù)據(jù)。,GRPC概述,2、GRPC基于強(qiáng)大的IDL(Interfacedescriptionlanguage)GRPC基于ProtoBuf(ProtocolBuffers)定義接口規(guī)范。ProtoBuf是什么?ProtocolBuffers是google提供的一種輕便、高效、簡單的數(shù)據(jù)存儲語言,可以用于結(jié)構(gòu)化、序列化數(shù)據(jù)。為什么要使用ProtoBuf?適合應(yīng)用場景:它很適合做數(shù)據(jù)存儲或RPC數(shù)據(jù)交換格式??捎糜谕ㄓ崊f(xié)議、數(shù)據(jù)存儲等領(lǐng)域的語言無關(guān)、平臺無關(guān)、可擴(kuò)展的序列化數(shù)據(jù)結(jié)構(gòu)。,GRPC概述,支持語言眾多(提供了完善的API):Proto2提供了C+、Java、Python三種語言的API。目前語言版本Proto3提供了更多的語言支持,包括C+、C#、GO、JAVA、PYTHON。易學(xué)易懂:protoBuf語法非常簡單,掌握非常容易,便于讀寫。以下為protoBuf的語法例子:官網(wǎng):,GRPC概述,3、GRPC支持眾多開發(fā)語言GRPC目前支持的開發(fā)語言已達(dá)到了10種:C,C+,Java,Go,Node.js,Python,Ruby,Objective-C,PHPandC#。并且GRPC框架已在GitHub上開源。GitHub地址:,GRPC使用案例,2、編譯proto文件編譯有兩種方式:一是在IDE中直接引入protobuf插件來編譯。二是到官網(wǎng)下載源碼,手工生成protoc編譯器,然后再編譯(不推薦,步驟太繁瑣)。protoBuf官方源碼:,為什么要使用GRPC,1、它使用HTTP2協(xié)議,可復(fù)用鏈接,更充分的利用底層TCP傳輸協(xié)議,并以數(shù)據(jù)流的方式傳輸,比其他基于HTTP1的傳輸速率更高。2、它基于ProtoBuffer語言,對傳輸數(shù)據(jù)進(jìn)行壓縮、系列化和結(jié)構(gòu)化,易于客戶端與服務(wù)端數(shù)據(jù)的讀寫操作,并使數(shù)據(jù)量傳輸變得更小、傳輸效率更高。3、基于以上及其他特性,使得基于GRPC的客戶端和服務(wù)端更高效的利用流和鏈接,從而有助于節(jié)省寬帶流量、降低鏈接次數(shù)、提高CUP使用效率和電池的使用壽命。,GRPC使用案例,案例、Person的服務(wù)1、通過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)簡單的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.適用場景:客戶端上傳大量數(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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 水電行業(yè)2025年技術(shù)創(chuàng)新動(dòng)態(tài)與大型水電項(xiàng)目投資效益研究報(bào)告001
- 基于風(fēng)險(xiǎn)管理的2025年文化旅游小鎮(zhèn)開發(fā)社會(huì)穩(wěn)定評估報(bào)告
- 2025年元宇宙社交平臺虛擬身份認(rèn)同與用戶體驗(yàn)研究報(bào)告
- 二手交易電商平臺信用體系建設(shè)與信用評級行業(yè)規(guī)范研究報(bào)告001
- 2025年農(nóng)業(yè)新型經(jīng)營主體農(nóng)村金融服務(wù)創(chuàng)新與培育路徑研究報(bào)告
- 2025屆山東省濟(jì)南市萊蕪區(qū)蓮河學(xué)校英語八年級第二學(xué)期期中考試試題含答案
- 2025年農(nóng)業(yè)科技成果轉(zhuǎn)化中的農(nóng)業(yè)技術(shù)培訓(xùn)案例報(bào)告
- 數(shù)字孿生在城市基礎(chǔ)設(shè)施建設(shè)中的應(yīng)用模式及2025年發(fā)展趨勢報(bào)告
- 2025年醫(yī)藥流通供應(yīng)鏈優(yōu)化與成本控制創(chuàng)新策略研究報(bào)告
- 工業(yè)互聯(lián)網(wǎng)平臺數(shù)字水印技術(shù)實(shí)時(shí)監(jiān)測與數(shù)據(jù)安全預(yù)警:2025年數(shù)據(jù)保護(hù)解決方案報(bào)告
- 育嬰員考試題型及答案
- 科室建立血糖管理制度
- 四川成都東方廣益投資有限公司下屬企業(yè)招聘筆試題庫2025
- 物業(yè)小飯桌管理制度
- 高中英語必背3500單詞表完整版
- 醫(yī)師職業(yè)素養(yǎng)課件
- 電網(wǎng)工程設(shè)備材料信息參考價(jià)2025年第一季度
- Python試題庫(附參考答案)
- 高校實(shí)驗(yàn)室安全基礎(chǔ)學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 2023年廣東初中學(xué)業(yè)水平考試生物試卷真題(含答案)
- 混凝土強(qiáng)度增長曲線
評論
0/150
提交評論