目前使用的框架是:TP3
有一个场景是第三方回调太早,导致数据库里查不到相关数据,所以需要让它等待几秒再执行,与此同时,不阻塞系统其它进程的执行,请问这个该如何实现?
有一个场景是第三方回调太早,导致数据库里查不到相关数据,所以需要让它等待几秒再执行,与此同时,不阻塞系统其它进程的执行,请问这个该如何实现?
|
lsheroAug 1, 2020
1
和第三方约定好重试机制让第三方轮询,因为需要你返回给第三方结果,所以延时队列之类的并不适合,除非你主动在处理完了后回调第三方。
|
|
RickyCAug 1, 2020
2
你们说话都这么学术么? 连问题我都读不懂.
|
|
demoshengxwAug 1, 2020 via Android
3
限定 php 的话,要么你用生成器 yield 配合 send 方法进行通信来模拟协程,要么 swoole 协程。
|
|
zjsxwcAug 1, 2020 via Android
4
beanstalk 这种队列中间件呗
|
|
WaldenHorizonAug 1, 2020
5
最简单粗暴的方法是 while(sleep(1000)) {data = select db;if(data) break;}
|
|
towserAug 1, 2020
6
FPM 模式下本来也不阻塞其他进程。
|
|
realpgAug 1, 2020
7
sleep 就行
fpm 只阻塞自己,反正自己接下来也没啥要干的,无所谓的。 如果服务器需要处理这种比较多,配置 fpm pool 的进程限制多一点 |
|
jjshareAug 2, 2020
9
数据立等可取,那就优先读 cache,以 cache 为源
|
|
cokarAug 2, 2020
10
你这个问题是要即时响应给那边的,即使异步操作也要等待处理完后响应,即使你用 swoole 实现了异步,你这个接口的进程仍然需要挂着,也只能是 sleep 了,建议你还是想办法把主从延时问题解决。
不过你说的这个回调,一般都会有多次尝试的,第一次不行,那就尝试第二次 |
|
cbasilAug 3, 2020
11
这种建议做异步,等你有数据的时候返回给对方接口,像微信支付一样,支付结果微信会发送到你的通知接口。
|
|
ben1024Aug 4, 2020
12
加入个队列处理
|