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 协议》,转载必须注明作者和本文链接
推荐文章: