V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
clearT
V2EX  ›  PHP

grpc PHP 的疑惑

  •  
  •   clearT · 2019-01-14 22:48:23 +08:00 · 7054 次点击
    这是一个创建于 2169 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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 ?

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

    18 条回复    2020-07-16 19:07:05 +08:00
    sagaxu
        1
    sagaxu  
       2019-01-14 22:52:58 +08:00 via Android
    不支持 php 很奇怪吗,leetcode 也不支持 php 刷题啊
    CTO
        2
    CTO  
       2019-01-14 22:58:09 +08:00   ❤️ 1
    @sagaxu 我第一次刷 leetcode , 找了半天没有 PHP,差点一口老血喷出来,还好我有压箱底的 c :doge
    visitant
        3
    visitant  
       2019-01-14 22:58:40 +08:00 via iPhone
    我记得,php 会限制进程运行时间,可能跟这个有点关系?
    troywinter
        4
    troywinter  
       2019-01-14 23:35:15 +08:00
    grpc 是通过 http2 协议通信的,可以从这个角度看看是否有完整的支持
    clearT
        5
    clearT  
    OP
       2019-01-14 23:51:51 +08:00 via iPhone
    @sagaxu 我是想知道不支持的原因是不是像上面我想的那样,现在微服务生态比较流行,php 微服务实现起来不方便,微博貌似是用 go 实现了一个 agent 来和 php-fpm 通信,我想请教的是如果用 swoole 实现一个 grpc server 是否需要向我上面说的那样自己实现路由功能,php 的微服务生态和 java 比有点差啊,好像 swoft 不错
    clearT
        6
    clearT  
    OP
       2019-01-14 23:53:52 +08:00 via iPhone
    @sagaxu 我现在是个学生还没有机会实践微服务,但我对这方面挺有兴趣的想学
    sagaxu
        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 支持的不好或者完全不支持,很常见,平常心对待。
    clearT
        8
    clearT  
    OP
       2019-01-15 00:35:17 +08:00 via iPhone
    @sagaxu 嗯,多谢解答,我还是很平常心的,不可能只学一门语言的,虽然我还没有达到那个层次,但我相信语言只是工具这句话绝不只是用来装 x 的,我还是希望 PHP 的生态能更好一些,毕竟它真正领我进入了编程的大门
    DavidNineRoc
        9
    DavidNineRoc  
       2019-01-15 09:38:34 +08:00
    @sagaxu
    @CTO 大清亡了? LeetCode 已经支持 PHP 了,别在落后一百年了
    sagaxu
        10
    sagaxu  
       2019-01-15 09:44:34 +08:00 via Android
    @DavidNineRoc 加入 php 还不到一个月
    sagaxu
        11
    sagaxu  
       2019-01-15 09:48:04 +08:00 via Android
    @DavidNineRoc 准确的说,2019 年 1 月 10 号才开始支持的 PHP,不到一周
    CTO
        12
    CTO  
       2019-01-15 11:07:52 +08:00
    @DavidNineRoc 怎么张口就来啊,还落后一百年?
    yanyandenuonuo
        13
    yanyandenuonuo  
       2019-01-15 14:57:40 +08:00
    基于 swoole 可以实现 grpc,通常需要 2 个部分,一个前端 http gateway 去处理 http 请求,然后解析自定义的路由去转发到另一个对应的后端 rpc 服务。
    to2false
        14
    to2false  
       2019-01-17 17:44:42 +08:00
    to2false
        15
    to2false  
       2019-01-17 17:45:27 +08:00
    补充说明下,用 php 和 go 都互相测试过了
    clearT
        16
    clearT  
    OP
       2019-01-17 18:02:36 +08:00 via iPhone
    @to2false 这是 client,不是 server
    to2false
        17
    to2false  
       2019-01-17 19:06:03 +08:00 via iPhone
    @clearT 看过了?明明有 server 的 example
    onanying
        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
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1298 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 17:20 · PVG 01:20 · LAX 09:20 · JFK 12:20
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.