PHP 页面如何正确地和消息队列通讯? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
enenaaa
V2EX    PHP

PHP 页面如何正确地和消息队列通讯?

  •  
  •   enenaaa Jan 23, 2018 3828 views
    This topic created in 3019 days ago, the information mentioned may be changed or developed.

    非常驻进程的 php 页面,需要等待某个消息的返回。 让 fpm 一直等么。

    嗯,不太想用 ajax 轮询的方式。

    15 replies    2018-01-24 14:10:40 +08:00
    killerv
        1
    killerv  
       Jan 23, 2018
    websocket ?
    NjcyNzMzNDQ3
        2
    NjcyNzMzNDQ3  
       Jan 23, 2018
    workerman 有现成的基于 websocket
    sszxcss
        3
    sszxcss  
       Jan 23, 2018
    workerman 或者 swoole
    b821025551b
        4
    b821025551b  
       Jan 23, 2018
    swoole 吧,貌似以后要官方集成了。
    gclove
        5
    gclove  
       Jan 23, 2018
    从道理上说,你不用守护进程还能怎么实现

    要实现这个必须要有守护进程,要么只能轮询

    你可以不用 PHP 实现
    enenaaa
        6
    enenaaa  
    OP
       Jan 23, 2018
    @gclove 有点好奇,非驻留进程的 php 页面怎么对接复杂的业务流程。

    比如百度搜索这样。前端 php 运行在 hhvm 内,要等待后端的完成消息, 看他没用 ajax, 不知道是否也是类似 workerman 的常驻机制。
    fcten
        7
    fcten  
       Jan 23, 2018
    指定一个回调地址,当消息返回时调用该地址即可。
    很多 web 端的异步处理,例如调用支付宝进行支付,都是这么做的。
    gclove
        8
    gclove  
       Jan 23, 2018
    @enenaaa 不太明白你说的

    你说展示搜索页面的 php 没用 ajax ?

    搜索界面在浏览器里, 肯定有通过 ajax 获取关键词推荐 和 结果啊

    另外 ajax 只是一种 http 下的一种交互方式,也有其它 RPC 的实现。 可以自己设计

    搜索服务提供者 肯定是 java 写的吧
    aksoft
        9
    aksoft  
       Jan 24, 2018
    golang 欢迎你
    enenaaa
        10
    enenaaa  
    OP
       Jan 24, 2018
    @gclove
    对链接 https://www.baidu.com/s?wd=%E6%B0%B4%E9%80%86
    抓包。 里面第一个 http 请求就返回搜索结果了的。 也就是说,浏览器对前端 php 的请求返回时,php 已经从“消息队列”里得到了业务后端的结果。这样的话,浏览器->php->业务后端->php->浏览器, 这个流程里 php 需要等待业务后端的消息。
    我好奇的就是它怎么等的?
    enenaaa
        11
    enenaaa  
    OP
       Jan 24, 2018
    @aksoft php 是最好的语言!
    gclove
        12
    gclove  
       Jan 24, 2018
    @enenaaa 你这个想法是不对的, 这个可以理解成普通的 url 传参请求。

    这里不需要消息队列,你可以理解成成 php 去请求别的 API 数据后输出结果的过程

    另外光学一种语言是不行的,大部分前端都会基本使用 php
    enenaaa
        13
    enenaaa  
    OP
       Jan 24, 2018
    @fcten 设定回调 uri 地址, 就不是在同一个 http 请求里完成的了。
    enenaaa
        14
    enenaaa  
    OP
       Jan 24, 2018
    @gclove 场景是一样的。php 去请求后端 api, 一样要等待呀。 问题是怎么等, 是异步的等, 还是同步的等。fpm 模式的执行方式, 同步等待的效率太低了。
    fcten
        15
    fcten  
       Jan 24, 2018
    @enenaaa
    什么需求一定要在一个 http 请求里完成?

    一个请求 + 懒得编码 -> 同步等待
    一个请求 + 异步 -> swoole
    多个请求 -> 回调地址

    原生的 php 不支持异步,你又嫌同步效率低,又要在一个 http 请求里完成,那就是无解...
    About     Help     Advertise     Blog     API     FAQ     Solana     845 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 44ms UTC 20:43 PVG 04:43 LAX 13:43 JFK 16:43
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86