GRPC是google开源的一个高性能、跨语言的RPC框架,基于HTTP2协议,基于protobuf 3.x,支持多种开发语言。
对于开发者而言:
1)需要使用protobuf定义接口,即.proto文件
2)然后使用compile工具生成特定语言的执行代码,比如JAVA、C/C++、Python等。类似于thrift,为了解决跨语言问题。
3)启动一个Server端,server端通过侦听指定的port,来等待Client链接请求。
本文以golang和php为例展开教程,使用golang做rpc server,php做rpc client,实现跨语言调用。
前期准备
golang的grpc包
golang的rpc包,作为golang rpc server需要这个包
go get google.golang.org/grpc
php的grpc扩展
下载地址: http://pecl.php.net/package/gRPC
安装过程:
phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make
make install
# 添加grpc.so到php.ini配置
vim /usr/local/php/etc/php.ini
extension = "grpc.so"
php -m | grep "grpc"
grpc
protoc
命令行下将proto协议文件转换为多种语言对应格式的工具
下载地址:https://github.com/google/protobuf
安装
./configure
make
make install
protoc --help
Usage: protoc [OPTION] PROTO_FILES
Parse PROTO_FILES and generate output based on the options given:
...
尝试运行
golang的 rpcserver
- (1). 可直接用go get 的例子
go get google.golang.org/grpc/examples/helloworld
#将会编译好greeter_server和greeter_client
greeter_server
#greeter_server启动后挂起...
在另一个命令行运行:
greeter_client "this is my message"
2017/08/30 21:55:25 Greeting: Hello this is my message
- (2). 手动生成go文件运行
假如我们有一个proto文件helloworld.proto:
syntax = "proto3";
option java_multiple_files