PHP+MySQL实现消息队列的方法分析


Posted in PHP onMay 09, 2018

本文实例讲述了PHP+MySQL实现消息队列的方法。分享给大家供大家参考,具体如下:

最近遇到一个批量发送短信的需求,短信接口是第三方提供的。刚开始想到,获取到手机号之后,循环调用接口发送不就可以了吗?

但很快发现问题:当短信数量很大时,不仅耗时,而且成功率很低。

于是想到,用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、成功率高,失败的记录会自动重发,直到成功

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
PHP语法速查表
Dec 06 PHP
ADODB的数据库封包程序库
Dec 31 PHP
require(),include(),require_once()和include_once()区别
Mar 27 PHP
PHP中基本符号及使用方法
Mar 23 PHP
PDO版本问题 Invalid parameter number: no parameters were bound
Jan 06 PHP
解析Ubuntu下crontab命令的用法
Jun 24 PHP
PHP将XML转数组过程详解
Nov 13 PHP
json的键名为数字时的调用方式(示例代码)
Nov 15 PHP
PHP统计nginx访问日志中的搜索引擎抓取404链接页面路径
Jun 30 PHP
php输入流php://input使用浅析
Sep 02 PHP
Yii2分页的使用及其扩展方法详解
May 23 PHP
php分页查询mysql结果的base64处理方法示例
May 18 PHP
PHP共享内存使用与信号控制实例分析
May 09 #PHP
php curl批处理实现可控并发异步操作示例
May 09 #PHP
php使用curl伪造来源ip和refer的方法示例
May 08 #PHP
PHP+ajax实现获取新闻数据简单示例
May 08 #PHP
PHP 计算两个特别大的整数实例代码
May 07 #PHP
详解PHP发送邮件知识点
May 06 #PHP
PHP学习笔记之session
May 06 #PHP
You might like
PHP两种快速排序算法实例
2015/02/15 PHP
php常用数组函数实例小结
2016/12/29 PHP
cssQuery()的下载与使用方法
2007/01/12 Javascript
服务器安全设置的几个注册表设置
2007/07/28 Javascript
JS处理VBArray的函数使用说明
2008/05/11 Javascript
很酷的javascript loading效果代码
2008/06/18 Javascript
高性能WEB开发 flush让页面分块,逐步呈现 flush让页面分块,逐步呈现
2010/06/19 Javascript
在jQuery ajax中按钮button和submit的区别分析
2012/10/07 Javascript
深入理解javascript中return的作用
2013/12/30 Javascript
jQuery实现下拉框左右选择的简单实例
2014/02/22 Javascript
javascript实现根据函数名称字符串动态执行函数的方法示例
2016/12/28 Javascript
Vuejs 页面的区域化与组件封装的实现
2017/09/11 Javascript
Laravel整合Bootstrap 4的完整方案(推荐)
2018/01/25 Javascript
Vue.js实现的表格增加删除demo示例
2018/05/22 Javascript
vue-自定义组件传值的实例讲解
2018/09/18 Javascript
Smartour 让网页导览变得更简单(推荐)
2019/07/19 Javascript
js实现时间日期校验
2020/05/26 Javascript
[01:01:18]VP vs NIP 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
[01:01:23]完美世界DOTA2联赛PWL S2 Forest vs FTD.C 第一场 11.26
2020/11/30 DOTA
Python Web框架Flask中使用百度云存储BCS实例
2015/02/08 Python
python 实时遍历日志文件
2016/04/12 Python
Python实现好友全头像的拼接实例(推荐)
2017/06/24 Python
聊聊Python中的pypy
2018/01/12 Python
Python设计模式之模板方法模式实例详解
2019/01/17 Python
django如何通过类视图使用装饰器
2019/07/24 Python
python单线程下实现多个socket并发过程详解
2019/07/27 Python
Pytorch实现基于CharRNN的文本分类与生成示例
2020/01/08 Python
解决更改AUTH_USER_MODEL后出现的问题
2020/05/14 Python
丹尼尔惠灵顿手表天猫官方旗舰店:Daniel Wellington
2017/08/25 全球购物
西班牙最大的在线滑板和街头服饰商店:Fillow.net
2019/04/15 全球购物
三严三实心得体会范文
2014/10/13 职场文书
学生自我评语
2015/01/04 职场文书
张思德观后感
2015/06/09 职场文书
在人间读书笔记
2015/06/30 职场文书
详解JS WebSocket断开原因和心跳机制
2021/05/07 Javascript
win10蓝屏0xc0000001安全模式进不了怎么办?win10出现0xc0000001的解决方法
2022/08/05 数码科技