简介
gRPC是Google主导的一个高性能,跨语言的RPC(远程过程调用)框架。官网: https://grpc.io/
支持多种常见的流行编程语言,如C++ Java Node.js PHP Python等等。 其实从本质上来看到gRPC其实是基于使用protobuf做为数据传输格式,借助HTTP2协议通信做的一个RPC框架,只要任何语言实现了gRPC的规范即可以实现跨平台调用。类比Restful Api使用json作为数据传输格式,over HTTP1.1进行通信,大致也就这么回事,没想象中那么复杂。
跨语言和跨平台很大功劳在于Google推出的这个protobuf数据传输格式。我们可以把它看做和json xml一类作用的东西。
protobuf数据格式被编译后形成二进制数据,相对json等传输格式,解析效率高,压缩体积小,并且能够明确传递数据的数据类型等等。
1.什么是protobuf?
详细信息可以参考官方文档与介绍: https://developers.google.com/protocol-buffers/
2.实践
采用PHP作为client, Golang作为Server端模拟一个用户登录过程。(PHP目前只支持作为客户端的角色实现。我们知道由于PHP语言特性本身不支持内置提供强大的HTTP服务,借助于fastcgi与nginx或者apache等工作,所以这个也是不支持作为gRPC server服务端的主要原因。)
其实工作顺序大致分为下面几个步骤:
1.编写 protobuf文件,定义好rpc接口 参数 以及返回值
1 | syntax = "proto3"; |
2.使用protoc工具将上面的protobuf文件转化为符合gRPC的PHP代码以及Go代码
1 | 预备知识: protobuf知识得了解 以及 protoc生成各种语言的插件集成 |
3.PHP客户端要做的事情
1 | 1. pecl install grpc #安装grpc扩展 |
4.启动Go服务端代码
1 |
|
5.PHP客户端调用情况
1 |
|
3.调试工具推荐
我们在普通开发Restful Api的时候常常借助于Postman等工具来调试接口,以及无界面的工具
curl等。 那么我们开发gRPC项目的时候,是不是也有类似的产品或者工具呢?肯定是有的。
GUI工具,类似Postman=>bloomrpc: https://github.com/uw-labs/bloomrpc
UI效果还不错,值得一试。导入protobuf,填写好调用的server端信息即可调试了。
命令行工具,类似curl=>grpcurl: https://github.com/fullstorydev/grpcurl