hyperf3搭建grpc demo
搭建环境如果是linux因为默认版本的gcc是4.8.5编译安装grpc失败,必须升级gcc的版本可以参考《php 安装 grpc 扩展》。
gcc重新编译比较耗时所以还是比较建议用docker
Dockerfile
FROM php:8.1
# 安装必要的工具和依赖
RUN apt-get update \
&& apt-get install -y --no-install-recommends \
git \
libssl-dev \
zlib1g-dev \
libzip-dev \
autotools-dev \
automake \
libtool \
protobuf-compiler \
cmake \
vim \
net-tools \
zip \
unzip \
php-zip \
&& rm -rf /var/lib/apt/lists/*
# 安装 Swoole、Redis、grpc 扩展,将多个RUN合成一个,减少镜像的大小
RUN pecl install swoole && docker-php-ext-enable swoole \
&& echo "swoole.use_shortname='Off'" >> /usr/local/etc/php/conf.d/docker-php-ext-swoole.ini \
&& pecl install redis && docker-php-ext-enable redis && docker-php-ext-install pcntl \
&& pecl install grpc && docker-php-ext-enable grpc \
&& curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer \
&& docker-php-ext-enable grpc \
&& echo 'grpc.enable_fork_support=1' >> /usr/local/etc/php/conf.d/docker-php-ext-grpc.ini \
&& apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
# 设置工作目录
WORKDIR /var/www/html
# 暴露端口
EXPOSE 9501
# 构建镜像
docker build -t env-grpc .
# 运行容器
docker run -it -p 9501:9501 -v 宿主机目录地址:/var/www/html --name test -d env-grpc
# 进入容器
docker exec -it test bash
# 在容器内安装hyperf
composer create-project hyperf/hyperf-skeleton grpc-demo
# 进入目录
cd grpc-demo
# 新建 grpc.proto
vim grpc.proto
syntax = "proto3";
package grpc;
service hi {
rpc sayHello (HiUser) returns (HiReply) {
}
}
message HiUser {
string name = 1;
int32 sex = 2;
}
message HiReply {
string message = 1;
HiUser user = 2;
}
# 保存退出
# 创建grpc文件夹
mkdir grpc
# 编译器protoc使用php插件生成gRPC的php代码
# --php_out=grpc/ 指示编译器将生成的 PHP 代码输出到 grpc/ 目录中。
#grpc.proto 是待编译的 Protocol Buffers 文件。
protoc --php_out=grpc/ grpc.proto
根目录grpc文件下会生成如下:

配置composer.json

# 安装grpc server 示例 composer require hyperf/grpc-server # 配置gRPC 服务

配置路由

新建HiController.php

安装 gRPC client
composer require hyperf/grpc-client
新建HiClient.php

新建GrpcController.php

添加client测试路由
测试:
# 启动服务 php ./bin/hyperf.php start

浏览器请求 http://127.0.0.1:9501/client


浙公网安备 33010602011771号