通过php+roadrunner实现grpc服务端

通过php实现grpc服务端

php版本:
php >= 8.1

本地环境安装部署

创建项目

composer create-project zhonghaibin/grpc-service

在安装依赖包的时候,因为有墙等特殊网络原因(懂得都懂),有可能在获取rr二进制可执行文件会超时失败,重新手动获取 rr 可执行文件,在项目根目录打开命令行执行如下命令,我当初就是一直下载不了,导致我构建了个docker镜像。实在是下载不下来rr可执行文件。建议使用下面的Docker 安装和部署,简单又高效。

./vendor/bin/rr get-binary

启动服务(win10)

./rr.exe serve

通过 Docker 安装和部署

个人比较推荐使用Dockerfile构建容器进行部署.

创建项目

composer require zhonghaibin/grpc-service

进入目录

cd grpc-service

构建镜像

sudo  docker build -t php-grpc-service:latest .

创建容器

 sudo  docker run -d --name=grpc-serve -p 8000:8000 php-grpc-service:latest 

创建一次性容器

 sudo  docker run  --rm  -it --name=grpc-serve -p 8000:8000 php-grpc-service:latest sh

进入容器

 sudo  docker exec -it grpc-serve  sh

启动容器

sudo  docker start grpc-serve

停止容器

sudo  docker stop grpc-serve

删除容器

sudo  docker rm grpc-serve

删除镜像

sudo  docker rmi php-grpc-service:latest 

docker-compose 部署

构建服务

docker-compose up

停止

docker-compose stop

启动

docker-compose start

通过php请求grpc服务端

php版本:
php >= 8.1
客户端仓库地址:

https://github.com/zhonghaibin/php-grpc-client.git

下载源码:

git clone https://github.com/zhonghaibin/php-grpc-client.git

基于本地环境安装

将此行添加到 php.ini 文件中的任意位置

extension=php_grpc.dll

安装依赖包

composer install

启动web服务 命令行输入:

php -S 127.0.0.1:8080

或基于 docker 环境安装

1 该镜像内置php8.1,composer,grpc扩展。
  sudo docker pull zhonghaibin/php8-cli-roadrunner
2 运行容器,并停留在容器命令行终端
  sudo  docker run  --rm  -it --name=php8-cli -p 8080:8080 -v $(pwd):/app zhonghaibin/php8-cli-roadrunner sh
3 安装依赖包, 请在容器命令行终端内执行
  composer install
4 启动web服务,请在容器命令行终端内执行
  php -S 0.0.0.0:8080

最后打开浏览器

打开浏览器进行访问 http://127.0.0.1:8080

或者使用第三方客户端ApiPost7请求grpc服务

打开apipost客户端,新建grpc,选择导入proto

选择项目目录的 grpc/protos/base/hello-world.proto 文件

grpc 客户端配置参考文档:

https://cloud.google.com/php/grpc?hl=zh-cn#using-pecl

grpc 服务端参考文档:

https://roadrunner.dev/docs/plugins-grpc/2023.x/en

protoc构建步骤

1 根据自己的需求创建 hello-world.proto 文件

2 通过 hello-world.proto 生成 php 类文件

这里需要下载两个可执行文件把 hello-world.proto 生成 php文件,

因为我用的是win10:

所以下载的是 protoc.exe 和 protoc-gen-php-grpc.exe 

这两个文件我放在项目里 protoc-22.3-win64 文件夹里面,如果你和我环境一样直接用我下载好的即可,其他平台请自行下载

下载地址:https://github.com/roadrunner-server/roadrunner/releases

生成php文件命令如下:

./protoc.exe --plugin=protoc-gen-php-grpc.exe --php_out=./ --php-grpc_out=./ hello-world.proto

这里会在当前目录下生成两个文件夹:GPBMetadata 和 Services

把生成好的文件夹复制到 项目目录的 grpc/generated 目录下

root
├─app
│  ├─console 
│  ├─services        
│  │   ├─Task        //异步任务
│  │   └─HelloService.php   //写自己的业务
│  └─support
├─config
├─grpc
│ ├─generated         //使用protoc自动构建的类均存在这
│ │  ├─Services       //服务统一命名空间
│ │  └─GPBMetadata    //GRPC生成的元数据
├ └─protos            //所有proto存在这里

如果这篇文章对你有帮助,请点赞收藏加关注,么么哒。

本作品采用《CC 协议》,转载必须注明作者和本文链接
勿以恶小而为之,勿以善小而不为
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 1

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!