通过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 协议》,转载必须注明作者和本文链接
:+1: