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下的权限算法的实现
Apr 28 PHP
PHP注释实例技巧
Oct 03 PHP
理解php原理的opcodes(操作码)
Oct 26 PHP
php读取本地文件常用函数(fopen与file_get_contents)
Sep 09 PHP
php中$_GET与$_POST过滤sql注入的方法
Nov 03 PHP
php模拟post提交数据的方法
Feb 12 PHP
php异常处理方法实例汇总
Jun 24 PHP
PHP比较运算符的详细介绍
Sep 29 PHP
详解WordPress中给链接添加查询字符串的方法
Dec 18 PHP
PHP读取文件内容的五种方式
Dec 28 PHP
Ajax和PHP正则表达式验证表单及验证码
Sep 24 PHP
CakePHP框架Model关联对象用法分析
Aug 04 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超大文件下载,断点续传下载的方法详解
2013/06/06 PHP
PHP实现通过文本文件统计页面访问量功能示例
2019/02/13 PHP
TNC vs RR BO3 第一场 2.14
2021/03/10 DOTA
js 实现打印网页中定义的部分内容的代码
2010/04/01 Javascript
jQuery ul标签下拉菜单演示代码
2010/12/11 Javascript
js判断输入是否为数字的具体实例
2013/08/03 Javascript
javascript中声明函数的方法及调用函数的返回值
2014/07/22 Javascript
js控制再次点击按钮之间的间隔时间可防止重复提交
2014/08/01 Javascript
简介可以自动完成UI的AngularJS工具angular-smarty
2015/06/23 Javascript
JavaScript预解析及相关技巧分析
2016/04/21 Javascript
Extjs4.0 ComboBox如何实现三级联动
2016/05/11 Javascript
JavaScript页面实时显示当前时间实例代码
2016/10/23 Javascript
纯js实现悬浮按钮组件
2016/12/17 Javascript
jQuery简单实现MD5加密的方法
2017/03/03 Javascript
vue-cli的webpack模板项目配置文件分析
2017/04/01 Javascript
详解vue.js移动端导航navigationbar的封装
2017/07/05 Javascript
javascript编程开发中取色器及封装$函数用法示例
2017/08/09 Javascript
[js高手之路]从原型链开始图解继承到组合继承的产生详解
2017/08/28 Javascript
基于JavaScript实现前端数据多条件筛选功能
2020/08/19 Javascript
Node之简单的前后端交互(实例讲解)
2017/11/14 Javascript
vue3.0 CLI - 2.4 - 新组件 Forms.vue 中学习表单
2018/09/14 Javascript
js中Function引用类型常见有用的方法和属性详解
2019/12/11 Javascript
react组件基本用法示例小结
2020/04/27 Javascript
详解vue高级特性
2020/06/09 Javascript
基于ant design日期控件使用_仅月份的操作
2020/10/27 Javascript
Python计算回文数的方法
2015/03/11 Python
深入理解Python中变量赋值的问题
2017/01/12 Python
如何在sae中设置django,让sae的工作环境跟本地python环境一致
2017/11/21 Python
pycharm重置设置,恢复默认设置的方法
2018/10/22 Python
python找出完数的方法
2018/11/12 Python
Django框架搭建的简易图书信息网站案例
2019/05/25 Python
关于初始种子自动选取的区域生长实例(python+opencv)
2020/01/16 Python
Ubuntu中配置TensorFlow使用环境的方法
2020/04/21 Python
双立人加拿大官网:Zwilling加拿大
2020/08/10 全球购物
庐山导游词
2015/02/03 职场文书
Win10 Anaconda安装python-pcl
2022/04/29 Servers