grpc初体验:Go服务端、php客户端


grpc初体验:Go服务端、php客户端

信息

1、Go@v1.17
2、php@7.4
3、grpc@1.41.1
4、ubuntu@18.04

准备工作

安装Go
安装php
安装php扩展:grpc 、protobuf (可不安装)
生成protoc、grpc_php_plugin可执行文件

生成protoc、grpc_php_plugin可执行文件

git clone -b v1.41.1 https://github.com/grpc/grpc.git
cd grpc
git submodule update --init
mkdir -p cmake/build
cmake ../..
make protoc grpc_php_plugin
cp cmake/build/third_party/protobuf/protoc-3.17.3.0 /usr/local/protoc
cp cmake/build/grpc_php_plugin /usr/local/grpc_php_plugin

ps:网上很多资料不是这么做的,但我测试时候那些方法不好使了
protoc所在目录:cmake/build/third_party/protobuf/protoc-3.17.3.0
grpc_php_plugin所在目录:cmake/build/grpc_php_plugin

demo流程简介

mkdir grpc-demo
cd grpc-demo
mkdir go php protos
cd protos
vim hello.proto [1] //定义服务端方法
生成Go服务端代码:protoc protos/hello.proto --go_out=plugins=grpc:go
组册Message服务
生成php客户端代码:protoc protos/hello.proto --php_out=php --grpc_out=php --plugin=protoc-gen-grpc=/usr/bin/grpc_php_plugin

php_out:php代码输出路径,生成 request 、response、client代码
grpc_out:GPBMetadata输出路径,用于保存.proto的二进制元数据
plugin:生成代码插件的绝对路径

编写请求客户端
测试:启动服务:go run go/main.go 请求服务:php php/hello.php

备注

hello.proto 编写使 需要定义 package
服务端和客户端代码生成时,package 可根据情况进行修改

Go服务端:package pb
php客户端:App.Message,可根据自己的命名空间进行自定义。生成后,代码的命名空间不能修

php 第三方库:grpc/grpc、google/protobuf

google/protobuf 可用php扩展代替

[参考资料]
[1]:https://github.com/grpc/grpc/tree/master/src/php "protoc和grpc_php_plugin生成文档"
[2]: "参考实例"
[3]:https://www.bookstack.cn/read/eddycjy-grpc/2138a6a48029f32c.md#exooxl "Go客户端"
[4]:https://gitee.com/fjgh/grpc-demo "demo 代码仓库"