gRPC 是一个高性能、开源和通用的 RPC 框架,面向移动和 HTTP/2 设计。目前提供 C、Java 和 Go 语言版本,分别是:grpc, grpc-java, grpc-go. 其中 C 版本支持 C, C++, Node.js, Python, Ruby, Objective-C, PHP 和 C#。

gRPC 基于 HTTP/2 标准设计,带来诸如双向流、流控、头部压缩、单 TCP 连接上的多复用请求等特。这些特性使得其在移动设备上表现更好,更省电和节省空间占用。

测试环境:

系统是新安装的CentOS 7.2

Shell

 

一、YUM安装相关工具

 

Shell

 

二、下载gRPC源码和相关子模块

这步可能出现失败或者网速慢的情况(原因你懂的),多执行几次直到完全下载完毕为止。

Shell

firecat注:执行以上三个命令,会自动下载源码,也包含第三方third_party文件夹的全部源码。

也就是说,我们不需要手动去官网https://github.com/grpc/grpc下载源码。因为有第三方库不好操作,不好安装,搞错了会很麻烦。

三、编译安装protobuf

这个步骤有个地方要下载googlecode的里面的代码,国内正常来说是下载不下来的(除非有梯子),所以要换个下载地址:

Shell

找到这行:

Shell

修改为:

Shell

然后编译安装即可:

Shell

firecat注:我的实践结果是不需要自行编译和安装protobuf这个步骤,因为第二步的三个命令已经实现下载了protobuf的源码。

四、编译安装gRPC

 

执行make install的时候,我这里有错误提示:

明明是有安装protoc的,但是没检测到,网上找了资料说这个问题好像是不影响的。

firecat注:这个步骤顺利通过,没有出现错误提示。

五、Demo测试

官方自带有个HelloWorld的Demo,可以编译这个Demo看是否我们已经安装成功了。

结果报错了:

firecat注,我的也出现了这个错误。

意思是找不到环境变量PKG_CONFIG_PATH,解决方法是把环境变量加上去:

在gRPC目录下新建和保存脚本文件actviate.sh:

然后执行:(firecat注:要在同个终端,先执行脚本后执行编译)

Shell

编译成功。(注意,每次新开终端编译或运行程序,都要执行actviate.sh,除非把环境变量设成永久有效)

然后运行服务端,监听的是50051端口:

Shell

在另外一个终端执行客户端程序:

成功!

另外如果编译时遇到如下错误:

error while loading shared libraries: libprotobuf.so.17: cannot open shared object file: No such file or directory

解决方法:

# find ./ -depth -name "libprotobuf.so.14" -print
一般情况会在/usr/local/lib中,然后:
# cat /etc/ld.so.conf
include ld.so.conf.d/*.conf

# echo "/usr/local/lib" >> /etc/ld.so.conf

# ldconfig