




已閱讀5頁,還剩16頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
GRPC課件,課件內(nèi)容GRPC概述為什么要使用GRPCGRPC案例講解,GRPC概述,一、什么是GRPCGRPC是由Google提供的一個高性能、通用性強的RPC開源框架,它主要面向移動應(yīng)用開發(fā)。官網(wǎng):http:/www.grpc.io/,知識點:RPC的實現(xiàn)思路大同小異,以動態(tài)代理為例,定義好接口,用一個代理假裝實現(xiàn)了這個接口(真正的實現(xiàn)放在服務(wù)端),供客戶端調(diào)用,代理內(nèi)部將該方法調(diào)用封裝成一個網(wǎng)絡(luò)請求發(fā)送到服務(wù)端。服務(wù)端根據(jù)參數(shù)找到對應(yīng)的注冊好的對象進行處理,返回給客戶端。,GRPC概述,以下為GRPC概念圖:,GRPC概述,二、GRPC的特性1、基于HTTP/2協(xié)議標準什么是HTTP/2協(xié)議?HTTP2.0即超文本傳輸協(xié)議2.0,是下一代HTTP協(xié)議(基于二進制的傳輸協(xié)議)。是由互聯(lián)網(wǎng)工程任務(wù)組(IETF)的Bis(httpbis)工作小組進行開發(fā)。,GRPC概述,HTTP/2的優(yōu)點http2減少了網(wǎng)絡(luò)往返傳輸?shù)臄?shù)量,并且用多路復(fù)用和快速丟棄不需要的流的辦法來完全避免headoflineblocking(線頭阻塞)的困擾,降低延遲并提高安全性。支持大量并行流,所以即使網(wǎng)站的數(shù)據(jù)分發(fā)在各處也不是問題。合理利用流的優(yōu)先級,可以讓客戶端盡可能優(yōu)先收到更重要的數(shù)據(jù)。,GRPC概述,2、GRPC基于強大的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)、可擴展的序列化數(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ā)語言已達到了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ù)進行壓縮、系列化和結(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ù)端與客戶端實現(xiàn)簡單的RPC調(diào)用(不使用流操作)AsimpleRPC.特點:服務(wù)器與客戶端的數(shù)據(jù)交互量非常小。服務(wù)端實現(xiàn)(hello)Overridepublicvoidhello(Personrequest,StreamObserverresponseObserver)responseObserver.onNext(ResponseMessage.newBuilder().setMessage(Hello+request.getName()+,LetsStartLearnGrpc!).build();responseObserver.onCompleted();客戶端實現(xiàn),GRPC使用案例,客戶端實現(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.特點:客戶端上傳大量數(shù)據(jù)到服務(wù)端,服務(wù)端返回非常小的數(shù)據(jù)量給客戶端。服務(wù)器端實現(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使用案例,客戶端實現(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.特點:服務(wù)端返回大量數(shù)據(jù)到客戶端,客戶端上傳非常小的數(shù)據(jù)量給服務(wù)端。服務(wù)器端實現(xiàn)OverridepublicvoidgetPersonByName(QueryPersonRequestrequest,StreamObserverresponseObserver)responseObserver.onNext(persons.get(request.getName();responseObserver.onCompleted();,GRPC使用案例,客戶端實現(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ù)器端實現(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使用案例,客戶端實現(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)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 南昌市污泥固化處理工程方案
- 2025年天津市創(chuàng)佳時代科技企業(yè)管理有限公司招聘考試筆試試題(含答案)
- 2025年濟寧金鄉(xiāng)縣城鎮(zhèn)公益性崗位招聘考試筆試試題(含答案)
- 老年癡呆中醫(yī)課件
- 老年護理課件結(jié)尾
- 老年護理職業(yè)前景
- 老師的視頻課件圖片
- 老師開班會課件模板
- 老師如何開班會課件
- 餐廳裝修工程進度與付款管理合同
- T/CNFAGS 16-2024綠色甲醇分級標準(試行)
- 國民經(jīng)濟行業(yè)分類代碼(2024年版)
- 房屋市政工程生產(chǎn)安全重大事故隱患判定檢查表(2024版)
- 2025年財會業(yè)務(wù)知識競賽題庫及答案(360題)
- 大連農(nóng)商銀行2024年招聘172人管理單位遴選500模擬題附帶答案詳解
- 2023年廣東初中學(xué)業(yè)水平考試生物試卷真題(含答案)
- 齊魯醫(yī)學(xué)健康知識-遠離“三高”
- 安徽省工傷職工停工留薪期分類目錄
- 混凝土試件養(yǎng)護出入臺賬
- 2022醫(yī)學(xué)課件出疹性傳染病
- 職業(yè)安全衛(wèi)生知識競賽題
評論
0/150
提交評論