在做A事情的时候,如果符合某条件,则需要另外做一件比较耗时的B事情,B的结果不需要返回给用户,所以考虑用异步方式来做B。这样改如何用异步实现啊
我来回答一下吧,排除swoole,zanphp这种异步框架来说,常规的实现方式。
while(true) {
sleep(1);
}
以上是一个死循环,对,你没看错,然后在这里面写上事务处理的代码,稍后说,先说关于这个死循环的管理。
这个死循环是必须常住后台进程的,所以采用supervisor(自行百度)来自行这段PHP代码,相当于做进程管理,用supervisor来启动这这段PHP代码是以命令行模式运行的。
然后,接下来说队列处理思路:
把要处理的事务加入到redis或者mysql,总之有个东西存这段信息就好了,这个信息主要包括自行那个程序,如哪个控制器的哪个方法,或者哪个模型的哪个方法;
在while(true)队列里实现的是,间隔1秒从存储的数据里取出队列,根据存储的信息进行自行指定的程序,当然,自行的这个方法如果有参数,那么写入存储的队列信息里也要进行存储,自行队列的时候也就可以根据这个信息进行传参和处理了。
这就是整个异步队列的实现思路,也就是说正常的业务执行的时候只要写入信息就好了,然后事务执行逻辑就采用常驻进程的PHP程序去查询要执行的东西进行执行,也就是异步的了(具体业务逻辑不需要等待,不同步)。
1 回答4.1k 阅读✓ 已解决
3 回答1.8k 阅读✓ 已解决
2 回答2.2k 阅读✓ 已解决
2 回答2.2k 阅读
1 回答1.4k 阅读✓ 已解决
796 阅读
647 阅读
swoole、workman擁有異步功能模塊.
其實我覺得你這種不是用異步去滿足,既然不需要返回給用戶,那麼其實不需要及時將滿足A條件的內容交給B去處理。就是可以使用隊列+自動化處理,將所有滿足A丟入隊列。跟住使用自動化將定量的隊列數據執行B處理。這個可以減少系統資源的使用