PHP搞微服务杂谈(三) 实现GRPC服务全部模式

拉点家常

前一篇文章详细描述了如何实现服务端流模式,关键要解决的一点就是绕过swoole http,直接使用 swoole server 向客户端进行发送。实现了服务端流之后,我在脑海构思这个客户端流的实现。在这边先说明各个模式的区别吧。官方文档请转 grpc.io/docs/what-is-grpc/core-con...

Unary RPC (一元RPC)

这个模式大多数框架都支持,hyperf官方文档中实现的也是这个模式。很好理解,一次请求中客户端发送一次,服务端响应一次。

Server streaming RPC(服务端流式RPC)

这个模式就是上篇中提到的,一次请求中客户端发送一次,服务端可响应多次数据直到关闭。具体在哪方面应用呢,最典型的就是 GRPC的健康服务中Watch方法,客户端调用一次Watch,服务端可响应不同时间段服务的最新状态。

Client streaming RPC(客户端流式RPC)

这个模式就是此次要实现的难点,在上一个模式中我们是绕过swoole http,直接使用 swoole server 向客户端进行发送。而这一个模式,我们就得完全放弃swoole http了,因为http server,是需要等待形成完整的请求才触发onRequest。这就意味着,客户端无法多次推送数据,服务端也无法实时获取到数据,因此就必须要使用 tcp server。

使用 tcp server,需要处理数据流解析,处理头部并完成请求,复杂的是客户端有可能一次发送的data中包含多个请求。感兴趣的同学可以看下 github.com/crayxn/hyperf-grpc/tree...

Bidirectional streaming RPC(双向流式RPC)

双向流也就是服务流跟客户端流结合,客户端跟服务端均可完成多次数据流推送。

进入主题

演示项目 github.com/crayxn/grpc-stream-demo

使用 Hyperf 实现并支持 GRPC 全部姿势(unary、服务端流模式、客户端流模式、双向流模式)
核心插件请移步 github.com/crayxn/hyperf-grpc/tree...

Quick Start

需要 PHP >=8; Swoole >= 4.4(若无环境,可参考 博客:PHP搞微服务杂谈(一)关于高效的开发环境搭建 搭建)

运行

git clone git@github.com:crayxn/grpc-stream-demo.git
cd grpc-stream-demo
composer install
php bin/hyperf.php start

测试

打开 Postman,New > GRPC > Using server reflection

如果对您有帮助,请 github 给个星。谢谢

本作品采用《CC 协议》,转载必须注明作者和本文链接
from crayxn github.com/crayxn
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 5
CodingHePing

支持

9个月前 评论
Crayxn (楼主) 9个月前
goStruct

php这块的微服务必须支持一波。

9个月前 评论
Crayxn (楼主) 9个月前

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