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