PHP和MySQL实现 定时器+消息队列
来源:互联网 发布:代销和寄销 知乎 编辑:程序博客网 时间:2024/05/19 06:18
最近遇到一个批量发送短信的需求,短信接口是第三方提供的。刚开始想到,获取到手机号之后,循环调用接口发送不就可以了吗?
但很快发现问题:当短信数量很大时,不仅耗时,而且成功率很低。
于是想到,用PHP和MySQL实现一个消息队列,一条一条的发送短信。下面介绍具体的实现方法:
首先,建立一个数据表sms,包含以下字段:
id,phone, //手机号content //短信内容
将需要发送的短信和手机号存入sms表中。
接下来,需要用PHP实现一个定时器,定时读取一条记录,并发送短信:
<?php$db = new Db();$sms = new Sms();while(true){ $item = $db->getFirstRecord(); //获取数据表第一条记录 if(!$item){ //如果队列中没有数据,则结束定时器 break; } $res = $sms->send($item['phone'],$item['content']); //发送短信 if($res){ $db->deleteFristRecord(); //删除发送成功的记录 echo $item['phone'].'发送成功'; }else{ echo $item['phone'].'发送失败,稍后继续尝试'; } sleep(10); //每隔十秒循环一次 }echo '发送完毕!';?>
将代码保存为timer_sms.php,打开命令行,执行定时器:
php timer_sms.php
好了,php定时器将会根据设定的时间间隔(这里设的是10秒),自动完成发送短信的任务。任务完成后将自动退出定时器,不再占用服务器资源。
根据我的测试,PHP定时器占用资源并不多,不会对服务器造成压力。而且是异步访问数据库,也不会影响数据库的运行。
这种方式的优点是:
1、后台运行,前台无需等待
2、成功率高,失败的记录会自动重发,直到成功
转自:https://my.oschina.net/crazymus/blog/479741
0 0
- PHP和MySQL实现 定时器+消息队列
- php 实现消息队列
- php实现redis消息队列将数据保存到mysql
- php+redis实现消息队列
- PHP消息队列实现笔记
- PHP消息队列实现及应用:消息队列概念介绍
- PHP消息队列实现及应用:队列处理订单系统和配送系统
- PHP下用Memcache 实现消息队列
- php Memcache 中实现消息队列
- PHP memcache实现消息队列实例
- activeMQ+stomp+php实现消息队列
- 使用Redis+php-resque实现消息队列
- PHP memcache实现消息队列实例
- PHP共享内存实现的消息队列
- Redis PHP Set集合实现消息队列
- Redis PHP Set集合实现消息队列
- PHP中使用ActiveMQ实现消息队列
- php+redis消息队列抢购实现
- 在使用Mybatis框架中遇到的bug
- POSIX线程
- 注解@Transactional
- Java 语言中的synchronized核心总结
- iOS 小菊花
- PHP和MySQL实现 定时器+消息队列
- 拆解Activity的启动和跳转另一个Activity的生命周期的变化
- JavaScript 详说事件机制之冒泡、捕获、传播、委托
- 编译tomcat
- HashMap实现原理分析
- Thread.currentThread().getContextClassLoader() 和 Class.getClassLoader()区别
- Log4Net 调试日志, 数据库写入不进去
- 深度学习笔记1:神经网络 卷积神经网络
- 【UVa 11300】&【BZOJ 1045】【HAOI 2008】推一发