天天看点

rpc框架之gRPC 学习 - hello world

rpc框架之gRPC 学习 - hello world

​​grpc​​是google在github于2015年开源的一款RPC框架,虽然​​protobuf​​很早google就开源了,但是google一直没推出正式的开源框架,导致github上基于protobuf的rpc五花八门,国内比较著名的有百度的​​sofa-pbrpc​​,但是遗憾的是soft-pbrpc没有对应的java实现版本。rgpc还有一个独立的官网:​​http://www.grpc.io/​​,目前已经支持的语言有 ​​C​​, ​​C++​​, ​​Java​​, ​​Go​​, ​​Node.js​​, ​​Python​​, ​​Ruby​​, ​​Objective-C​​, ​​PHP​​ 、 ​​C#​​. grpc最大的特点是基于protobuf + http2 协议,​​http2协议​​虽然还未正式定稿,但从目前得知的内容来看,潜力巨大。下面是grpc基本的hello world的示例:

一、grpc-contract

还是按老套路,把服务涉及的对象定义、接口定义抽象出来,下面是项目结构图:

rpc框架之gRPC 学习 - hello world

pom.xml的内容如下:

rpc框架之gRPC 学习 - hello world
rpc框架之gRPC 学习 - hello world

View Code

demo_service_dto.proto内容如下:

rpc框架之gRPC 学习 - hello world
rpc框架之gRPC 学习 - hello world

注:grpc要求protobuf必须使用3.0以上版本

demo_service.proto内容如下:

rpc框架之gRPC 学习 - hello world
rpc框架之gRPC 学习 - hello world

mvn install 后,会自动在target下生成相应的java class类

rpc框架之gRPC 学习 - hello world

二、grpc-server

pom.xml文件如下:

rpc框架之gRPC 学习 - hello world
rpc框架之gRPC 学习 - hello world

先对服务接口提供实现:

和前面​​thrift​​、​​avro​​的helloworld一样,这里的实现只是意思一下,方便测试而已。

grpc的server端是基于Netty的(当然还有OKHttp的实现,详情见github项目主页),下面是server端的代码:

三、grpc-client

pom.xml内容:

rpc框架之gRPC 学习 - hello world
rpc框架之gRPC 学习 - hello world

Client端代码:

在笔记本测试的结果:

Will try to ping a ...

ping: pong => a

rgpc 100000 次NettyServer调用,耗时:36409毫秒,平均2746次/秒

基本上在每秒3k次的数量级,相对thrift(1w+)、avro(5k+)来讲,目前的差距还是很明显的,但是新事物成长总是需要时间,再给google一段时间,相信以后会让大家感到惊艳的。

在序列化方面,也做了一个跟之前thrift、avro类似的测试:

输出:

Protobuf 3.0 二进制序列后的byte数组长度:4

1 - 1

在2进制序列化后的大小方面,protobuf 3大体跟thrift的TCompactProtocal(大小5)接近,比avro(大小2)略差。

作者:​​菩提树下的杨过​​