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 相关文章推荐
使用 php4 加速 web 传输
Oct 09 PHP
解析yahoo邮件用phpmailer发送的实例
Jun 24 PHP
php一次性删除前台checkbox多选内容的方法
Sep 22 PHP
php cookie使用方法学习笔记分享
Nov 07 PHP
使用PHP实现阻止用户上传成人照片或者裸照
Dec 25 PHP
PHP实现根据银行卡号判断银行
Apr 29 PHP
谈谈PHP中substr和substring的正确用法及相关参数的介绍
Dec 16 PHP
PHP中如何防止外部恶意提交调用ajax接口
Apr 11 PHP
PHP+Mysql无刷新问答评论系统(源码)
Dec 20 PHP
php利用imagemagick实现复古老照片效果实例
Feb 16 PHP
thinkphp5.1 文件引入路径问题及注意事项
Jun 13 PHP
Laravel框架搜索分页功能示例
Feb 01 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
常用星际术语索引(新手指南)
2020/03/04 星际争霸
php preg_replace替换实例讲解
2013/11/04 PHP
php强制文件下载而非在浏览器打开的自定义函数分享
2014/05/08 PHP
CI框架自动加载session出现报错的解决办法
2014/06/17 PHP
PHP中cookie知识点学习
2018/05/06 PHP
php 调用百度sms来发送短信的实现示例
2018/11/02 PHP
PHP常用函数之根据生日计算年龄功能示例
2019/10/21 PHP
suggestion开发小结以及对键盘事件的总结(针对中文输入法状态)
2011/12/20 Javascript
JavaScript高级程序设计(第3版)学习笔记 概述
2012/10/11 Javascript
浅谈页面装载js及性能分析方法
2014/12/09 Javascript
使用AngularJS和PHP的Laravel实现单页评论的方法
2015/06/19 Javascript
js面向对象之常见创建对象的几种方式(工厂模式、构造函数模式、原型模式)
2015/11/09 Javascript
JavaScript基础语法之js表达式
2016/06/07 Javascript
AngularJS基础 ng-keyup 指令简单示例
2016/08/02 Javascript
使用jquery如何获取时间
2016/10/13 Javascript
原生javascript移动端滑动banner效果
2017/03/10 Javascript
JS中的JSON对象的定义和取值实现代码
2018/05/09 Javascript
详解Angularjs 自定义指令中的数据绑定
2018/07/19 Javascript
webpack结合express实现自动刷新的方法
2019/05/07 Javascript
ECharts地图绘制和钻取简易接口详解
2019/07/12 Javascript
Vue的属性、方法、生命周期实例代码详解
2019/09/17 Javascript
原生JS实现贪吃蛇小游戏
2020/03/09 Javascript
JavaScript图像放大镜效果实现方法详解
2020/06/28 Javascript
vue a标签点击实现赋值方式
2020/09/07 Javascript
python ip正则式
2009/05/07 Python
Python实现的文本对比报告生成工具示例
2018/05/22 Python
Python实现多条件筛选目标数据功能【测试可用】
2018/06/13 Python
安装多个版本的TensorFlow的方法步骤
2020/04/21 Python
Pygame的程序开始示例代码
2020/05/07 Python
浅析图片上传及canvas压缩的流程
2020/06/10 HTML / CSS
来自全球大都市的高级街头服饰:Pegador
2018/01/03 全球购物
澳大利亚厨房和家用电器购物网站:Bing Lee
2021/01/11 全球购物
商务日语毕业生自荐信范文
2013/11/14 职场文书
食品仓管员岗位职责
2015/04/01 职场文书
企业安全隐患排查治理制度
2015/08/05 职场文书
创业计划书之韩国烧烤店
2019/09/19 职场文书