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 ?
不知道问题是不是有点傻,希望得到大佬的解答,谢谢。
1
sagaxu 2019-01-14 22:52:58 +08:00 via Android
不支持 php 很奇怪吗,leetcode 也不支持 php 刷题啊
|
3
visitant 2019-01-14 22:58:40 +08:00 via iPhone
我记得,php 会限制进程运行时间,可能跟这个有点关系?
|
4
troywinter 2019-01-14 23:35:15 +08:00
grpc 是通过 http2 协议通信的,可以从这个角度看看是否有完整的支持
|
5
clearT OP @sagaxu 我是想知道不支持的原因是不是像上面我想的那样,现在微服务生态比较流行,php 微服务实现起来不方便,微博貌似是用 go 实现了一个 agent 来和 php-fpm 通信,我想请教的是如果用 swoole 实现一个 grpc server 是否需要向我上面说的那样自己实现路由功能,php 的微服务生态和 java 比有点差啊,好像 swoft 不错
|
7
sagaxu 2019-01-15 00:12:11 +08:00 via Android 1
@clearT php 的 http2 支持的不好只是表象,根本原因是长期以来,大厂更喜欢用 C++和 Java 做底层服务,然后 PHP 调用这些服务做业务逻辑,所以有 client 支持就够了。
以前 php 只有 fpm 一种姿势,并且现在仍然是 95%以上公司的选择,swoole 在国内很小众,在国外更小众。如果要支持 grpc,只能是 swoole 开发者主动去适配 grpc。swoole 团队的 grpc 支持,应该快了,他们现在都是全职开发 swoole 了。 你选择了 PHP,就要面对现实,很多时候它都不是一等公民,PHP 支持的不好或者完全不支持,很常见,平常心对待。 |
8
clearT OP @sagaxu 嗯,多谢解答,我还是很平常心的,不可能只学一门语言的,虽然我还没有达到那个层次,但我相信语言只是工具这句话绝不只是用来装 x 的,我还是希望 PHP 的生态能更好一些,毕竟它真正领我进入了编程的大门
|
9
DavidNineRoc 2019-01-15 09:38:34 +08:00
|
10
sagaxu 2019-01-15 09:44:34 +08:00 via Android
@DavidNineRoc 加入 php 还不到一个月
|
11
sagaxu 2019-01-15 09:48:04 +08:00 via Android
@DavidNineRoc 准确的说,2019 年 1 月 10 号才开始支持的 PHP,不到一周
|
12
CTO 2019-01-15 11:07:52 +08:00
@DavidNineRoc 怎么张口就来啊,还落后一百年?
|
13
yanyandenuonuo 2019-01-15 14:57:40 +08:00
基于 swoole 可以实现 grpc,通常需要 2 个部分,一个前端 http gateway 去处理 http 请求,然后解析自定义的路由去转发到另一个对应的后端 rpc 服务。
|
14
to2false 2019-01-17 17:44:42 +08:00
|
15
to2false 2019-01-17 17:45:27 +08:00
补充说明下,用 php 和 go 都互相测试过了
|
18
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
|