GO与PHP有关grpc,protobuf安装整理

gRPC整理

  • 一.安装go语言gRPC和Protobuf
  • 二.安装php语言gRPC和Protobuf
    • 1.安装grpc扩展
      • 1.1.通过PECL安装
      • 1.2.编译安装
      • 1.3更新php.ini
      • 1.4grpc/grpc Composer package
    • 2.Protocol Buffers
      • 2.1.protoc 编译器
      • 2.2protobuf 扩展
      • 2.3更新php.ini
      • 2.4google/protobuf composer package。
      • 2.5grpc_php_plugin 协议插件
    • 3.根据服务定义生成PHP类
  • 三.Protobuf语法
    • 1.protoc 其他参数

php(客户端)/golang(客户端) 使用grpc,protobuf调用 golang(服务端)应用可参考此处

一.安装go语言gRPC和Protobuf

1.go get github.com/golang/protobuf/proto
2.go get google.golang.org/grpc(无法使用,用如下命令代替)
		git clone https://github.com/grpc/grpc-go.git $GOPATH/src/google.golang.org/grpc
		git clone https://github.com/golang/net.git $GOPATH/src/golang.org/x/net
		git clone https://github.com/golang/text.git $GOPATH/src/golang.org/x/text
		go get -u github.com/golang/protobuf/{proto,protoc-gen-go}
		git clone https://github.com/google/go-genproto.git $GOPATH/src/google.golang.org/genproto
       cd $GOPATH/src/
      go install google.golang.org/grpc
2.go get github.com/golang/protobuf/protoc-gen-go  (protoc生成关于grpc的go文件的插件) 
上面安装好后,会在GOPATH/bin下生成protoc-gen-go.exe
3.但还需要一个protoc.exe,windows平台编译受限,很难自己手动编译,直接去网站下载一个,地址:
https://github.com/protocolbuffers/protobuf/releases/tag/v3.9.0(将proto文件生成为对应语言文件的编译器, 
根据自己系统下载对应的版本),同样放在GOPATH/bin下

二.安装php语言gRPC和Protobuf

1.安装grpc扩展

有两种安装grpc扩展的方法。
···1.1通过 pecl安装
···1.2.编译安装

1.1.通过PECL安装

pecl install grpc
或特定版本
pecl install grpc-1.30.0

请确保您的gcc版本满足此处指定的最低要求

在Windows上安装
您可以grpc.dll从PECL网站下载预编译的扩展 。

1.2.编译安装

获取编译安装的地址。

cd /usr/local/src
wget https://pecl.php.net/get/grpc-1.36.0.tgz
tar -zxvf  grpc-1.36.0.tgz
cd grpc-1.36.0
phpize 
./configure --with-php-config=/usr/bin/php-config  (php-config路径) 
make
make install

这将编译该grpc扩展并将其安装到标准PHP扩展目录中。您应该能够在安装扩展的情况下运行单元测试grpc

1.3更新php.ini

安装grpc扩展程序后,请确保php.ini根据您的PHP安装位置将此行添加到 文件中,以启用 grpc扩展程序。

extension=grpc.so

1.4grpc/grpc Composer package

除grpc扩展程序外,您还需要安装grpc/grpc composer软件包。将此添加到您的项目的composer.json文件。

 "require": {
        "grpc/grpc": "~1.30.0"
    }
   或
  composer require grpc/grpc  

要使用.proto文件中生成的存根代码运行测试,您还需要composer和protoc二进制文件。您可以在下面找到如何获得这些信息

2.Protocol Buffers

gRPC PHP开箱即用地支持 protocol buffers 。您需要具备以下条件才能开始使用:
···2.1.protoc:protobuf编译器二进制文件,用于为您的消息和服务定义生成PHP类。
···2.2.grpc_php_plugin:用于protoc生成服务存根类的插件。
···3.3.protobuf.so:protobuf扩展运行时库。

2.1.protoc 编译器

如果尚未安装,则需要protoc为当前gRPC版本安装protobuf编译器 3.5.0+版本(越新越好)。如果已经安装,请使protobuf版本与您安装的grpc版本兼容。如果从源创建grpc.so,则可以检查package.xml文件中的grpc版本。

下表列出了grpc和protobuf版本之间的兼容性:

grpc protobuf grpc protobuf grpc protobuf
v1.0.0 3.0.0(GA) v1.12.0 3.5.2 v1.22.0 3.8.0
v1.0.1 3.0.2 v1.13.1 3.5.2 v1.23.1 3.8.0
v1.1.0 3.1.0 v1.14.2 3.5.2 v1.24.0 3.8.0
v1.2.0 3.2.0 v1.15.1 3.6.1 v1.25.0 3.8.0
v1.2.0 3.2.0 v1.16.1 3.6.1 v1.26.0 3.8.0
v1.3.4 3.3.0 v1.17.2 3.6.1 v1.27.3 3.11.2
v1.3.5 3.2.0 v1.18.0 3.6.1 v1.28.1 3.11.2
v1.4.0 3.3.0 v1.19.1 3.6.1 v1.29.0 3.11.2
v1.6.0 3.4.0 v1.20.1 3.7.0 v1.30.0 3.12.2
v1.8.0 3.5.0 v1.21.3 3.7.0

如果protoc尚未安装,则可以protoc从协议缓冲区Github存储库下载二进制文件 。然后解压缩该文件并更新环境变量PATH以包含协议二进制文件的路径。

切换至任意一个目录下就可以
wget https://github.com/protocolbuffers/protobuf/releases/download/v3.15.6/protoc-3.15.6-linux-x86_64.zip
unzip protoc-3.15.6-linux-x86_64.zip

ls  //该目录下会增加包和文件夹 bin包 include包 readme.txt
cp bin/protoc /usr/local/bin    //将bin包下的protoc复制到/usr/local/bin下
protoc --version   //查看版本

插件可能会使用新的protobuf版本的新功能,因此也请确保安装的protobuf版本与您构建此插件的grpc版本兼容

2.2protobuf 扩展

获取编译安装的地址。

cd /usr/local/src
wget https://pecl.php.net/get/protobuf-3.15.6.tgz
tar -zxvf  protobuf-3.15.6.tgz
cd protobuf-3.15.6
phpize 
./configure --with-php-config=/usr/bin/php-config  (php-config路径) 
make
make install

2.3更新php.ini

extension=protobuf.so

2.4google/protobuf composer package。

将此添加到您的 composer.json文件:

 "require": {
        "google/protobuf": "~v3.12.2"
    }
    或
    composer require google/protobuf

2.5grpc_php_plugin 协议插件

您需要grpc_php_plugin生成PHP客户端存根类。该插件与主protoc二进制文件一起使用,以生成可以导入到项目中的类。

您可以grpc_php_plugin使用cmake以下命令进行构建:
RELEASE_TAG_HERE 用相应的版本替代如 v1.36.4 查看版本

# 下载 grpc 的库到本地
git clone -b RELEASE_TAG_HERE https://github.com/grpc/grpc
cd grpc
git submodule update --init 
当报错fatal,可先输入git init,在输入git submodule update,再执行上面的操作 git submodule update --init 

mkdir -p cmake/build
cd cmake/build
cmake ../..
当提示 cmake: command not found可执行 yum install cmake 或apk add cmake 或 apt-get install cmake,再执行上面的操作  cmake ../..

# 这里我们只编译 php 的插件 如果要编译所有的 make && make install
make protoc grpc_php_plugin

最终插件的路径:/usr/local/src/grpc/cmake/build/grpc_php_plugin  可以通过find / -name  grpc_php_plugin 查看到路径

3.根据服务定义生成PHP类

完成上述所有操作后,现在您可以在.proto文件中定义消息和服务定义,并生成相应的PHP类,您可以使用类似于以下的命令将其导入到项目中:

protoc -I=. echo.proto --php_out=. --grpc_out=. \
--plugin=protoc-gen-grpc=

不带客户端
protoc --proto_path=./ --php_out=./  Prod.proto 
生成带客户端的 (grpc_php_plugin 生成带客户端,grpc_php_plugin路径代表安装路径,以通过find / -name  grpc_php_plugin 查看)
protoc --proto_path=./ --plugin=protoc-gen-grpc=/usr/local/src/grpc/cmake/build/grpc_php_plugin --php_out=./ --grpc_out=./ Prod.proto 

php语言gRPC和Protobuf有关功能参考此处

三.Protobuf语法

在项目里面创建pdfiles目录,在此目录下创建Prod.proto文件,写入下面代码
syntax="proto3"; // 指定proto版本
package services;  // 指定默认包名
// 指定golang包名
option go_package = ".;services";

message ProdRequest{
  int32 prod_id=1; //传入的商品id
}
message ProdResponse{
  int32 prod_stock=1; //商品库存
}
创建services目录(用于生产go文件) 与pdfiles目录同级
在pdfiles目录下执行下面命令(--go_out 输出go格式文件,services:生成的go文件所放在的目录名):
protoc --go_out=plugins=grpc:../services  Prod.proto

1.protoc 其他参数

命令行使用方法

protoc --proto_path=IMPORT_PATH --_out=DST_DIR path/to/file.proto

–proto_path=IMPORT_PATH:可以在 .proto 文件中 import 其他的 .proto 文件,proto_path 即用来指定其他 .proto 文件的查找目录。如果没有引入其他的 .proto 文件,该参数可以省略。
–_out=DST_DIR:指定生成代码的目标文件夹,例如 –go_out=. 即生成 GO 代码在当前文件夹,另外支持 cpp/java/python/ruby/objc/csharp/php 等语言

你可能感兴趣的:(golang,protobuf,golang)