GRPC简单介绍和使用
一、基本介绍
- GRPC是一个高性能、通用的开源RPC框架,基于HTTP/2协议标准和Protobuf序列化
协议开发,支持众多的开发语言。
二、概括
- 在grpc框架中,客户端可以像调用本地对象一样直接调用位于不同机器的服务端方
法,如此我们就可以非常方便的创建一些分布式的应用服务。
- 在服务端,我们实现了所定义的服务和可供远程调用的方法,运行一个gRPC server
- 来处理客户端的请求;
- 在客户端,gRPC实现了一个stub(可以简单理解为一个client),其提供跟服务端
相同的方法。
三、特点
1、基于HTTP/2
HTTP/2 提供了连接多路复用、双向流、服务器推送、请求优先级、首部压缩等机制。可以
节省带宽、降低TCP链接次数、节省CPU,帮助移动设备延长电池寿命等。gRPC 的协议设
计上使用了HTTP2 现有的语义,请求和响应的数据使用HTTP Body 发送,其他的控制信
息则用Header 表示。
2、IDL使用ProtoBuf
gRPC使用ProtoBuf来定义服务,ProtoBuf是由Google开发的一种数据序列化协议
(类似于XML、JSON、hessian)。ProtoBuf能够将数据进行序列化,并广泛应用在数
据存储、通信协议等方面。压缩和传输效率高,语法简单,表达力强。
3、多语言支持
C, C++, Python, PHP, Nodejs, C#, Objective-C、Golang、Java
四、简单实用
1、安装grpc
go get google.golang.org/grpc
2、安装protocol buffer编译器
https://github.com/protocolbuffers/protobuf/releases
开发是可以安装相同的版本
3、安装go的protoc编译器插件
go get -u github.com/golang/protobuf/protoc-gen-go
编译器插件protoc-gen-go将安装在$GOBIN中,默认位于$GOPATH/bin
4、安装php的protoc编译器插件,php-protobuf,php-grpc
php --ri grpc 查看是否有grpc扩展
https://github.com/grpc/grpc/archive/v1.12.0.tar.gz
五、实例
1、定义proto文件 hello.proto
2、生成go对应的文件 hello.pb.go
protoc -I ./ -I $GOPATH/src/ --go_out=plugins=grpc:. $files
文件比较多,就不展示了
3、编写服务端 server/main.go
4、编写客户端 client/main.go
5、可以通过grpcurl调用服务端
grpcurl --plaintext -d '{"hi":"world"}' 127.0.0.1:50051 hello.Hello/SayHello
6、生成PHP文件调用服务端
protoc --proto_path=./ --php_out=./ --grpc_out=./ --plugin=protoc-gen-grpc=/usr/local/bin/grpc_php_plugin $files
生成文件有两部分,
调用服务端
六、参考文档
https://blog.****.net/xuduorui/article/details/78278808
https://www.jianshu.com/p/7392406e2450