请教一下php异步方案,谢谢!
各位好:
我的业务系统想要增加一个消息群发功能,就是类似给用户群发消息,或者实时调用第三方系统接口的功能。因为这个群发的业务量可能会大,所以想实现批量异步操作功能。有没有什么框架或者工具基于PHP可以实现每秒查询数据库是否有群发任务,如果有的话,则自动执行操作的。
但是目前还有没有想到用什么方法实现。所以请教该如何实现?
百度了一下,有说用swoole-crontab的, 也有说用redis的。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(15)
但是怎么实现多线程呢? 因为如果同步执行的话,任务执行太的话,肯定也执行不完啊。
php 不是有命令行模式吗 那样子去执行长时间任务
队列用redis没问题。 但是如何自动检查是否队列里面有任务,还有大量异步执行任务呢?
看看这个 https://github.com/netkiller/SOA
redis 队列 完全可以应对
swoole-crontab + redis
MQ 也挺合适
那如何实现异步呢?因为每个任务可能会费时长会长,所以同步跑的话,肯定实现不了呢。
回复
已经是异步了啊,lpush加到队列就返回了
回复
虽然是加到队列里面了。但是业务处理的时候,不是同步的话,得一个任务处理完之后,才能处理下一个么。 不能让任务异步执行么。
回复
仔细看我说的“然后后台运行一脚本,在死循环里用brpop取出来一个一个处理”
回复
“一个任务处理完之后,才能处理下一个”是在另一个进程或线程里处理就是异步,看来你还不太明白“异步”的意思,异步就是当前线程或进程不等待处理结果,由另一个线程或进程来处理。你觉得只有一个进程或线程处理太慢,你可以启多个嘛
用redis的list作队列就行了。加入队列用lpush,然后后台运行一脚本,在死循环里用brpop取出来一个一个处理,brpop当队列里没东西里会阻塞在那里
嗯嗯,这是最方便的方法了。
用php跑个脚本,定期到数据库里面扫描就行。做好队列的管理。
可以同时跑多个进程,一般来讲够用了。
瓶颈应该是在网络通讯上。