当前位置: 首页 > 工具软件 > gRPC-rs > 使用案例 >

php怎么实现grpc服务,gRPC 服务

谢弘阔
2023-12-01

gRPC 服务

gRPC 官方文档中的 quickstart – php, 很容易给 PHPer 产生误导, 按照官网的文档, 运行起来 gRPC 服务就很麻烦, 更不用说整套的 RPC 服务了.

推荐阅读 tech| 再探 grpc, 讲解了在 PHP 中实现 gRPC 相关基础知识.

hyperf 对 gRPC 支持做了更进一步的封装, hyperf-skeleton 项目为例, 详细讲解整个步骤:

.proto 文件以及相关配置实例

gRPC server 示例

gRPC client 示例

.proto 文件以及相关配置实例定义好 proto 文件 grpc.proto

配置 composer.json, 使用 grpc/ 下代码的自动加载. 如果 proto 文件中使用不同的 package 设置, 或者使用了不同的目录, 进行相应调整即可,添加之后执行 composer dump-autoload 使自动加载生效

gRPC server 示例

server.php 文件(参考 配置):

routes.php 文件(参考 路由):

HiController.php 文件中的 sayHello 方法:

.proto 文件中的定义和 gRPC server 路由的对应关系: /{package}.{service}/{rpc}

gRPC server 如何对 gRPC 请求进行处理的: HyperfGrpcServerCoreMiddleware::process() (vendor/hyperf/grpc-server/src/CoreMiddleware.php:46, 复制后直接使用 phpstorm 打开), 解析出 request_uri, 即得到 /{package}.{service}/{rpc} 信息, 然后调用好封装好的 gRPC 编解码类 HyperfGrpcParser::deserializeMessage(vendor/hyperf/grpc-server/src/CoreMiddleware.php:137), 就可以获取到请求的明文信息

gRPC server 如何进行 gRPC 响应, 相信你可以根据上面的信息, 自己发现.

gRPC client 示例

示例代码可以在 GrpcController 中找到:

hyperf 已经封装好了 HyperfGrpcClientBaseClient, 只要根据 .proto 文件中的定义, 按需扩展:

写在后面

如果你是 gRPC 的重度使用者, 欢迎关注 hyperf 的后续开发者工具, 可以根据 .proto 文件生成全套 gRPC 代码.

 类似资料: