grpc PHP 的疑惑

2019-01-14 22:48:23 +08:00
 clearT

1.请问各位大佬 grpc 为什么只支持 php 的 client,不支持 php server,是因为 php cli 模式下没有稳定可用于生产的 支持 http2 的服务器吗( php -s 不能用于生产环境)?如果是这样的话是否采用 swoole 可以实现一个 cli 的 http2 服务,然后自己在加上路由的功能?(或者 swoole 和 laravel 等框架适配直接使用框架的路由)不知道我这样理解对不对。

2.grpc 是基于 http2 和 pb 的,所以是否服务端是开启一个 http 服务来监听 rpc 请求,而不是 TCP 服务?

2.Thrift 支持 php server ?

不知道问题是不是有点傻,希望得到大佬的解答,谢谢。

7000 次点击
所在节点    PHP
18 条回复
sagaxu
2019-01-14 22:52:58 +08:00
不支持 php 很奇怪吗,leetcode 也不支持 php 刷题啊
CTO
2019-01-14 22:58:09 +08:00
@sagaxu 我第一次刷 leetcode , 找了半天没有 PHP,差点一口老血喷出来,还好我有压箱底的 c :doge
visitant
2019-01-14 22:58:40 +08:00
我记得,php 会限制进程运行时间,可能跟这个有点关系?
troywinter
2019-01-14 23:35:15 +08:00
grpc 是通过 http2 协议通信的,可以从这个角度看看是否有完整的支持
clearT
2019-01-14 23:51:51 +08:00
@sagaxu 我是想知道不支持的原因是不是像上面我想的那样,现在微服务生态比较流行,php 微服务实现起来不方便,微博貌似是用 go 实现了一个 agent 来和 php-fpm 通信,我想请教的是如果用 swoole 实现一个 grpc server 是否需要向我上面说的那样自己实现路由功能,php 的微服务生态和 java 比有点差啊,好像 swoft 不错
clearT
2019-01-14 23:53:52 +08:00
@sagaxu 我现在是个学生还没有机会实践微服务,但我对这方面挺有兴趣的想学
sagaxu
2019-01-15 00:12:11 +08:00
@clearT php 的 http2 支持的不好只是表象,根本原因是长期以来,大厂更喜欢用 C++和 Java 做底层服务,然后 PHP 调用这些服务做业务逻辑,所以有 client 支持就够了。

以前 php 只有 fpm 一种姿势,并且现在仍然是 95%以上公司的选择,swoole 在国内很小众,在国外更小众。如果要支持 grpc,只能是 swoole 开发者主动去适配 grpc。swoole 团队的 grpc 支持,应该快了,他们现在都是全职开发 swoole 了。

你选择了 PHP,就要面对现实,很多时候它都不是一等公民,PHP 支持的不好或者完全不支持,很常见,平常心对待。
clearT
2019-01-15 00:35:17 +08:00
@sagaxu 嗯,多谢解答,我还是很平常心的,不可能只学一门语言的,虽然我还没有达到那个层次,但我相信语言只是工具这句话绝不只是用来装 x 的,我还是希望 PHP 的生态能更好一些,毕竟它真正领我进入了编程的大门
DavidNineRoc
2019-01-15 09:38:34 +08:00
@sagaxu
@CTO 大清亡了? LeetCode 已经支持 PHP 了,别在落后一百年了
sagaxu
2019-01-15 09:44:34 +08:00
@DavidNineRoc 加入 php 还不到一个月
sagaxu
2019-01-15 09:48:04 +08:00
@DavidNineRoc 准确的说,2019 年 1 月 10 号才开始支持的 PHP,不到一周
CTO
2019-01-15 11:07:52 +08:00
@DavidNineRoc 怎么张口就来啊,还落后一百年?
yanyandenuonuo
2019-01-15 14:57:40 +08:00
基于 swoole 可以实现 grpc,通常需要 2 个部分,一个前端 http gateway 去处理 http 请求,然后解析自定义的路由去转发到另一个对应的后端 rpc 服务。
to2false
2019-01-17 17:44:42 +08:00
to2false
2019-01-17 17:45:27 +08:00
补充说明下,用 php 和 go 都互相测试过了
clearT
2019-01-17 18:02:36 +08:00
@to2false 这是 client,不是 server
to2false
2019-01-17 19:06:03 +08:00
@clearT 看过了?明明有 server 的 example
onanying
2020-07-16 19:07:05 +08:00
PHP 之所以没有 gRPC 的 Server 是因为 fpm 的特殊执行方式,server 是借助 nginx 搭建的,因此 Server 只能以这样的方式存在 https://mattallan.me/posts/protobuf-php-services/ ,由于 PHP 的 cli 并非主流使用方式,因此就不奇怪了,但是我们能借助 Swoole 实现 Server: https://github.com/mix-php/grpc,还能和 go-micro 直接互通: https://github.com/mix-php/micro

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/527052

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX