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数据库连接类~~做成一个分页类!
Nov 25 PHP
php数据库密码的找回的步骤
Jan 12 PHP
thinkphp的CURD和查询方式介绍
Dec 19 PHP
网页上facebook分享功能具体实现
Jan 26 PHP
PHP递归删除目录几个代码实例
Apr 21 PHP
Yii的CDbCriteria查询条件用法实例
Dec 04 PHP
Yii2语言国际化的配置教程
Aug 19 PHP
php实现算术验证码功能
Dec 05 PHP
PHP获取HTTP body内容的方法
Dec 31 PHP
PHP levenshtein()函数用法讲解
Mar 08 PHP
PHP使用PDO、mysqli扩展实现与数据库交互操作详解
Jul 20 PHP
PHP学习记录之常用的魔术常量详解
Dec 12 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的sprintf函数的用法 控制浮点数格式
2014/02/14 PHP
php使用数组填充下拉列表框的方法
2015/03/31 PHP
PHP生成图表pChart的示例解析
2020/07/31 PHP
用jQuery实现检测浏览器及版本的脚本代码
2008/01/22 Javascript
jquery 学习之二 属性(html()与html(val))
2010/11/25 Javascript
jQuery中delegate与on的用法与区别示例介绍
2013/12/20 Javascript
jQuery操作DOM之获取表单控件的值
2015/01/23 Javascript
JavaScript框架是什么?怎样才能叫做框架?
2015/07/01 Javascript
JS获取CSS样式(style/getComputedStyle/currentStyle)
2016/01/19 Javascript
JavaScript正则表达式实例详解
2016/10/16 Javascript
ajax实现加载页面、删除、查看详细信息 bootstrap美化页面!
2017/03/14 Javascript
js实现瀑布流效果(自动生成新的内容)
2017/03/16 Javascript
了解ESlint和其相关操作小结
2018/05/21 Javascript
JavaScript中var、let、const区别浅析
2018/06/24 Javascript
Vuepress 搭建带评论功能的静态博客的实现
2019/02/17 Javascript
javascript获取元素的计算样式
2019/05/24 Javascript
Node中对非阻塞I/O、事件循环的知识点总结
2020/01/05 Javascript
Vue使用富文本编辑器Vue-Quill-Editor(含图片自定义上传服务、清除复制粘贴样式等)
2020/05/15 Javascript
[49:11]完美世界DOTA2联赛PWL S3 INK ICE vs DLG 第二场 12.20
2020/12/23 DOTA
Python对小数进行除法运算的正确方法示例
2014/08/25 Python
python图像处理之镜像实现方法
2015/05/30 Python
Python解惑之整数比较详解
2017/04/24 Python
Python实现的径向基(RBF)神经网络示例
2018/02/06 Python
详谈Python中列表list,元祖tuple和numpy中的array区别
2018/04/18 Python
Python 比较文本相似性的方法(difflib,Levenshtein)
2018/10/15 Python
Django ModelForm组件使用方法详解
2019/07/23 Python
Python爬虫运用正则表达式的方法和优缺点
2019/08/25 Python
Python中使用gflags实例及原理解析
2019/12/13 Python
加拿大票务网站:Ticketmaster加拿大
2017/07/17 全球购物
SmartBuyGlasses比利时:购买品牌太阳镜和眼镜
2019/08/09 全球购物
Orlebar Brown官网:设计师泳裤和泳装
2020/12/08 全球购物
2014年酒店年度工作总结
2014/12/10 职场文书
小班上学期幼儿评语
2014/12/30 职场文书
工作检讨书怎么写
2015/01/23 职场文书
思想道德自我评价2015
2015/03/09 职场文书
2016教师校本培训心得体会
2016/01/08 职场文书