最近要做群发短信和群发电邮的程序,因为某些限制,都是多次去请求响应的接口,达到群发的效果。
然后就出现了这样的问题:我需要给100个客户发电邮,接口的响应时间平均在2s,然后我的php需要对接口进行100次post操作,长达200s,然后页面就超时了……
在不改动PHP设置的前提下,如何解决这个问题?
我自己能想到两个方案:
每次post一个,然后页面跳转,就像国内某些开源程序生成静态页那样,每次只做一个小请求,比如10s可以完成五次post,然后跳转到新页面,传入start=10 start=15这样的参数,不断跳转跳转刷新刷新,最后完成这个任务。缺点是这样需要客户端一直守着浏览器……
把发送消息的任务存在数据库里,做一个send.php之类的文件,每次取一个或几个消息去发送,然后用crond或者计划任务每秒之行send.php检查有没有新任务,有的话就执行任务。
我想知道还有没有别的简单易行的方法,比如我曾经听说过rabbitMQ什么的,但是没弄明白。。。
很简单的,把任务的信息封装成一个消息发到消息队列,然后后台任务从消息队列异步取出消息,执行长时间的任务
https://www.aliyun.com/product/amqp?spm=5176.234368.1278132.6.23dddb25v2Emvv
放在后台任务执行是一个好办法,应该也是最好的方法,不需要rabbitMQ,这只会让问题复杂化。但实际上有个方法可以让你的php不超时,即使用户浏览器连接断开了,它也会继续执行下去,那就是在你的php文件最开始加上以下两行
ignore_user_abort(true);
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。