有个较耗时的外部 REST 服务需调用,同时还有查询 MySQL 之类的。
如果多线程的话,可以先创建一个线程调用 REST 、再去查 MySQL 、再把线程 join 。
可是 PHP 的多线程 /Pthreads 好像不靠谱?请问大家有更靠谱的方案吗?
1
pubby 2016-09-28 22:00:19 +08:00
如果要同步返回这些结果给请求方,那么大并发下不太适合 php 来做
|
2
wesley 2016-09-28 22:11:50 +08:00
curl_multi
|
3
gouchaoer 2016-09-28 22:26:18 +08:00 via Android
http 异步 php 的 guzzle 支持很好, rpc 的话 yar 也支持的,不需要多线程。。。。另外 php 的多线程是真的多线程,没有全局锁的,所有 pecl 的扩展都分了多线程 /单线程版本的。。。。
|
4
c3538378 OP @wesley 但是其实只有一个 http request , curl_multi 也是要等待吧?
@gouchaoer guzzle 也研究过,貌似也要用个什么 tick https://github.com/guzzle/guzzle/issues/1127 等下试试看 |
5
fuxkcsdn 2016-09-29 00:01:44 +08:00 via iPhone 1
1 , mysql 查询必须等待外部请求返回的结果?
是的话,那多线程也没啥用 不是的话,先查完 mysql 再执行外部请求 2 ,一次请求里,只有一个外部请求?还是多个? 只有一个的话,等待吧,没有其他方法了,多线程也同样要等待 多个的话,可以用 guzzle ,外部请求数固定的话用 promise ,不固定的话用 pool 3 ,是否需要返回响应给请求方? 需要,结合问题 1 , 2 不需要,用任务队列 |
6
yueyoum 2016-09-29 18:37:45 +08:00
异步才是未来啊,
发一个 REST 请求, 切出, 让其他代码执行 REST 回来后, 发出 mysql 查询请求, 切出, mysql 返回后, 此次任务完成. 完. 就是这么简单清晰 |