异步调用 HTTP 服务的正确方法? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
c3538378
V2EX    PHP

异步调用 HTTP 服务的正确方法?

  •  
  •   c3538378 2016-09-28 21:36:47 +08:00 5339 次点击
    这是一个创建于 3382 天前的主题,其中的信息可能已经有所发展或是发生改变。

    有个较耗时的外部 REST 服务需调用,同时还有查询 MySQL 之类的。

    如果多线程的话,可以先创建一个线程调用 REST 、再去查 MySQL 、再把线程 join 。

    可是 PHP 的多线程 /Pthreads 好像不靠谱?请问大家有更靠谱的方案吗?

    6 条回复    2016-09-29 18:37:45 +08:00
    pubby
        1
    pubby  
       2016-09-28 22:00:19 +08:00
    如果要同步返回这些结果给请求方,那么大并发下不太适合 php 来做
    wesley
        2
    wesley  
       2016-09-28 22:11:50 +08:00
    curl_multi
    gouchaoer
        3
    gouchaoer  
       2016-09-28 22:26:18 +08:00 via Android
    http 异步 php 的 guzzle 支持很好, rpc 的话 yar 也支持的,不需要多线程。。。。另外 php 的多线程是真的多线程,没有全局锁的,所有 pecl 的扩展都分了多线程 /单线程版本的。。。。
    c3538378
        4
    c3538378  
    OP
       2016-09-28 23:20:28 +08:00
    @wesley 但是其实只有一个 http request , curl_multi 也是要等待吧?

    @gouchaoer guzzle 也研究过,貌似也要用个什么 tick https://github.com/guzzle/guzzle/issues/1127 等下试试看
    fuxkcsdn
        5
    fuxkcsdn  
       2016-09-29 00:01:44 +08:00 via iPhone   1
    1 , mysql 查询必须等待外部请求返回的结果?
    是的话,那多线程也没啥用
    不是的话,先查完 mysql 再执行外部请求
    2 ,一次请求里,只有一个外部请求?还是多个?
    只有一个的话,等待吧,没有其他方法了,多线程也同样要等待
    多个的话,可以用 guzzle ,外部请求数固定的话用 promise ,不固定的话用 pool
    3 ,是否需要返回响应给请求方?
    需要,结合问题 1 , 2
    不需要,用任务队列
    yueyoum
        6
    yueyoum  
       2016-09-29 18:37:45 +08:00
    异步才是未来啊,

    发一个 REST 请求, 切出, 让其他代码执行
    REST 回来后, 发出 mysql 查询请求, 切出,
    mysql 返回后, 此次任务完成.


    完. 就是这么简单清晰
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2418 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 11:59 PVG 19:59 LAX 03:59 JFK 06:59
    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