GRPC入门及简单使用介绍.ppt

上传人:小飞机 文档编号:6506729 上传时间:2023-11-07 格式:PPT 页数:21 大小:316.49KB
返回 下载 相关 举报
GRPC入门及简单使用介绍.ppt_第1页
第1页 / 共21页
GRPC入门及简单使用介绍.ppt_第2页
第2页 / 共21页
GRPC入门及简单使用介绍.ppt_第3页
第3页 / 共21页
GRPC入门及简单使用介绍.ppt_第4页
第4页 / 共21页
GRPC入门及简单使用介绍.ppt_第5页
第5页 / 共21页
点击查看更多>>
资源描述

《GRPC入门及简单使用介绍.ppt》由会员分享,可在线阅读,更多相关《GRPC入门及简单使用介绍.ppt(21页珍藏版)》请在三一办公上搜索。

1、GRPC课件,课件内容GRPC概述为什么要使用GRPCGRPC案例讲解,GRPC概述,一、什么是GRPCGRPC是由Google提供的一个高性能、通用性强的RPC开源框架,它主要面向移动应用开发。,知识点:RPC 的实现思路大同小异,以动态代理为例,定义好接口,用一个代理假装实现了这个接口(真正的实现放在服务端),供客户端调用,代理内部将该方法调用封装成一个网络请求发送到服务端。服务端根据参数找到对应的注册好的对象进行处理,返回给客户端。,GRPC概述,以下为GRPC概念图:,GRPC概述,二、GRPC的特性1、基于HTTP/2协议标准什么是HTTP/2协议?HTTP 2.0即超文本传输协议

2、2.0,是下一代HTTP协议(基于二进制的传输协议)。是由互联网工程任务组(IETF)的Bis(httpbis)工作小组进行开发。,GRPC概述,HTTP/2的优点http2减少了网络往返传输的数量,并且用多路复用和快速丢弃不需要的流的办法来完全避免head of line blocking(线头阻塞)的困扰,降低延迟并提高安全性。支持大量并行流,所以即使网站的数据分发在各处也不是问题。合理利用流的优先级,可以让客户端尽可能优先收到更重要的数据。,GRPC概述,2、GRPC基于强大的IDL(Interface description language)GRPC基于ProtoBuf(Protoc

3、ol Buffers)定义接口规范。ProtoBuf是什么?Protocol Buffers 是google提供的一种轻便、高效、简单的数据存储语言,可以用于结构化、序列化数据。为什么要使用ProtoBuf?适合应用场景:它很适合做数据存储或 RPC 数据交换格式。可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化数据结构。,GRPC概述,支持语言众多(提供了完善的API):Proto2提供了 C+、Java、Python 三种语言的 API。目前语言版本Proto3提供了更多的语言支持,包括 C+、C#、GO、JAVA、PYTHON。易学易懂:protoBuf语法非常简单,掌

4、握非常容易,便于读写。以下为protoBuf的语法例子:,GRPC概述,3、GRPC支持众多开发语言GRPC目前支持的开发语言已达到了10种:C,C+,Java,Go,Node.js,Python,Ruby,Objective-C,PHP and C#。并且GRPC框架已在GitHub上开源。GitHub地址:https:/JAVA GitHub地址:https:/,GRPC使用案例,2、编译proto文件 编译有两种方式:一是在IDE中直接引入protobuf插件来编译。二是到官网下载源码,手工生成protoc编译器,然后再编译(不推荐,步骤太繁琐)。protoBuf官方源码:https:/

5、,为什么要使用GRPC,1、它使用HTTP2协议,可复用链接,更充分的利用底层TCP传输协议,并以数据流的方式传输,比其他基于HTTP1的传输速率更高。2、它基于Proto Buffer语言,对传输数据进行压缩、系列化和结构化,易于客户端与服务端数据的读写操作,并使数据量传输变得更小、传输效率更高。3、基于以上及其他特性,使得基于GRPC的客户端和服务端更高效的利用流和链接,从而有助于节省宽带流量、降低链接次数、提高CUP使用效率和电池的使用寿命。,GRPC使用案例,案例、Person的服务1、通过ProtoBuf定义接口规范定义消息体(message)message Person strin

6、g name=1;int32 age=2;message ResponseMessagestring message=1;message QueryPersonRequest string name=1;,GRPC使用案例,定义服务接口(service)service PersonService/A simple RPC.rpc hello(Person)returns(ResponseMessage)/A client-to-server streaming RPC.rpc addPerson(stream Person)returns(ResponseMessage)/A server-t

7、o-client streaming RPC.rpc getPersonByName(QueryPersonRequest)returns(stream Person)/A Bidirectional streaming RPC.rpc getAllPerson(stream Person)returns(stream Person),GRPC使用案例,2、GRPC服务端与客户端实现简单的RPC调用(不使用流操作)A simple RPC.特点:服务器与客户端的数据交互量非常小。服务端实现(hello)Overridepublic void hello(Person request,Strea

8、mObserver responseObserver)responseObserver.onNext(ResponseMessage.newBuilder().setMessage(Hello+request.getName()+,Lets Start Learn Grpc!).build();responseObserver.onCompleted();客户端实现,GRPC使用案例,客户端实现(hello)public void hello()/线程同步控制器CountDownLatch finishLatch=new CountDownLatch(1);Person person=Pers

9、on.newBuilder().setName(Jack).setAge(25).build();StreamObserver response=new StreamObserver()Overridepublic void onCompleted()finishLatch.countDown();Overridepublic void onError(Throwable arg0)finishLatch.countDown();Overridepublic void onNext(ResponseMessage message)System.out.println(message.getMe

10、ssage();try asyncStub.hello(person,response);finishLatch.await(1,TimeUnit.MINUTES);catch(Exception e)logger.log(Level.WARNING,RPC failed:0,e.getMessage();,GRPC使用案例,客户端到服务器端的单向流A client-to-server streaming RPC.特点:客户端上传大量数据到服务端,服务端返回非常小的数据量给客户端。服务器端实现(addPerson)Overridepublic StreamObserver addPerson(

11、StreamObserver responseObserver)return new StreamObserver()Overridepublic void onCompleted()responseObserver.onNext(ResponseMessage.newBuilder().setMessage(OK).build();responseObserver.onCompleted();Overridepublic void onError(Throwable arg0)Overridepublic void onNext(Person person)persons.put(perso

12、n.getName(),person);,GRPC使用案例,客户端实现public void addPerson()CountDownLatch finishLatch=new CountDownLatch(1);Person person=Person.newBuilder().setName(Jack).setAge(25).build();StreamObserver response=new StreamObserver()Overridepublic void onCompleted()finishLatch.countDown();Overridepublic void onErr

13、or(Throwable arg0)finishLatch.countDown();Overridepublic void onNext(ResponseMessage message)System.out.println(message.getMessage();tryStreamObserver request=asyncStub.addPerson(response);request.onNext(person);request.onCompleted();finishLatch.await(1,TimeUnit.MINUTES);catch(Exception e)logger.log

14、(Level.WARNING,RPC failed:0,e.getMessage();finally,GRPC使用案例,服务器端到客户端的单向流A server-to-client streaming RPC.特点:服务端返回大量数据到客户端,客户端上传非常小的数据量给服务端。服务器端实现 Overridepublic void getPersonByName(QueryPersonRequest request,StreamObserver responseObserver)responseObserver.onNext(persons.get(request.getName();respo

15、nseObserver.onCompleted();,GRPC使用案例,客户端实现Overridepublic void getPersonByName()CountDownLatch finishLatch=new CountDownLatch(1);QueryPersonRequest queryPersonRequest=QueryPersonRequest.newBuilder().setName(Jack).build();StreamObserver response=new StreamObserver()Overridepublic void onCompleted()fini

16、shLatch.countDown();Overridepublic void onError(Throwable arg0)finishLatch.countDown();Overridepublic void onNext(Person person)System.out.println(person);tryasyncStub.getPersonByName(queryPersonRequest,response);finishLatch.await(1,TimeUnit.MINUTES);catch(Exception e)logger.log(Level.WARNING,RPC fa

17、iled:0,e.getMessage();,GRPC使用案例,客户端与服务器端的双向流A Bidirectional streaming RPC.适用场景:客户端上传大量数据到服务端,服务端返回给客户端的数据量也很大。服务器端实现 Overridepublic StreamObserver getAllPerson(StreamObserver responseObserver)return new StreamObserver()Overridepublic void onCompleted()responseObserver.onCompleted();Overridepublic vo

18、id onError(Throwable e)Overridepublic void onNext(Person person)persons.put(person.getName(),person);Iterator personIt=persons.values().iterator();while(personIt.hasNext()responseObserver.onNext(personIt.next();,GRPC使用案例,客户端实现 public void getAllPerson()CountDownLatch finishLatch=new CountDownLatch(1

19、);StreamObserver response=new StreamObserver()Overridepublic void onCompleted()finishLatch.countDown();Overridepublic void onError(Throwable arg0)finishLatch.countDown();Overridepublic void onNext(Person person)System.out.println(person);tryStreamObserver request=asyncStub.getAllPerson(response);for

20、(int i=0;i5;i+)Person person=Person.newBuilder().setName(Jack+i).setAge(25+i).build();request.onNext(person);request.onCompleted();finishLatch.await(1,TimeUnit.MINUTES);catch(Exception e)logger.log(Level.WARNING,RPC failed:0,e.getMessage();,GRPC使用案例,服务端如何监听客户端的请求Server server=ServerBuilder.forPort(p

21、ort).addService(PersonServiceGrpc.bindService(new PersonServiceImpl().build().start();客户端如何请求指定的服务端ManagedChannel channel=ManagedChannelBuilder.forAddress(host,port).usePlaintext(true).build();/创建存根(可理解为代理)PersonServiceStub asyncStub=PersonServiceGrpc.newStub(channel);PersonServiceBlockingStub blockingStub=PersonServiceGrpc.newBlockingStub(channel);,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号