grpc是用go语言写的 go grpc源码( 二 )


gRPC入坑记概要
由于gRPC主要是谷歌开发的 , 由于一些已知的原因,gRPC跑demo还是不那么顺利的 。单独写这一篇 , 主要是gRPC安装过程中的坑太多了,记录下来让大家少走弯路 。
主要的坑:
本文讲解gRPC demo的同时,会介绍如何解决这些坑 。本文对应的Github地址:。该仓库存储了demo示例 , 以及部分系统编译好的二进制包 , 大家觉得有些步骤里耗时实在太长了,可以直接clone该仓库,复制二进制包到对应目录(仅限测试开发 , 生产环境还是老老实实自己编译吧) 。
升级GCC
gRPC命令行工具编译需要使用 GCC4.8及以上版本 。CentOS6系列的内置版本是GCC4.7 。
如果你的系统GCC版本=4.8,可以忽略本节 。如果仅使用golang、java,请忽略本节 。
如果需要升级gcc至4.8或更高版本,建议直接采用安装SCL源之后安装devtoolset-6(devtoolset-6目前gcc版本为6.3),因为devtoolset-4及之前的版本都已经结束支持,只能通过其他方法安装 。
升级到gcc 6.3:
需要注意的是scl命令启用只是 临时 的,退出shell或重启就会恢复原系统gcc版本 。如果要长期使用gcc 6.3的话:
这样退出shell重新打开就是新版的gcc了 。其它版本同理 。
升级到gcc 7.3:
已经停止支持的devtoolset4(gcc 5.2)及之前版本的安装方法,可能比较慢 , 大家感兴趣的话可以尝试 。
编译gRPC命令行工具
gRPC分C、JAVA、GO、NodeJS版本,C版本包括C++, Python, Ruby, Objective-C, PHP, C#,这些语言都是基于C版本开发的,共用代码库一个代码库 。
如果使用C版本的gRPC,最终要从源码里编译出下列工具:
这些工具作为插件供proto编译器使用 。需要先下载 grpc/grpc github上的源码 。
这里有2个坑:
1、grpc/grpc仓库比较大 , 鉴于国内访问的网速,建议使用国内镜像 。码云()提供了同步更新的镜像地址:
这样下载速度提高了不少 。
2、git submodule update这个命令实际就是在下载.gitmodules文件里定义的第三方依赖项到third_party目录 , 这个依赖项有很多 , 大家可以打开.gitmodules文件查看下详情 。依赖的仓库都在github上,下载没几个小时是下载不下来的,就等着慢慢下载吧 。
回头想想,我们花费了很多时间,结果只是为了得到grpc的proto编译插件 。
PHP相关支持
PHP暂时不支持作为grpc的服务端 。作为客户端是可以的,需要机器安装:
其中protoc和protobuf c扩展已经在 Protobuf 小试牛刀 介绍过了,这里不再赘述 。上一小节里如果安装成功 , 那么grpc_php_plugin也是有了的 。下面介绍如何安装PHP版的gRPC库 。
安装grpc c扩展:
要求:GCC编译器需要4.8及以上版本 。可以使用pecl安装:
也可以指定版本:
或者下载源码()安装:
grpc/grpc代码库里也有PHP扩展的C源码 , 在grpc/src/php/ext/grpc目录,进去也可以直接编译 。
编译完成后在php.ini里添加,使用php --ri grpc可以查看信息 。
【grpc是用go语言写的 go grpc源码】 安装完C扩展后,还需要使用composer安装grpc的库:
gRPC示例
编写gRPC proto
一共定义了三个文件:
其中 User 作为 Model定义,Response 用于 RPC统一返回定义,GreeterService 则是服务接口定义 。
限于篇幅 , proto文件详见仓库的proto目录 。
GreeterService.proto文件内容如下:
这里面定义了一个service , 相当于定义了一个服务接口 , 我们把方法名、参数定义好了 , 后面需要去实现它 。由于gRPC不支持PHP作为服务端,这里我们使用Golang作为服务端 。

推荐阅读