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的相似度计算函数:levenshtein的使用介绍
Apr 15 PHP
php实现文件下载简单示例(代码实现文件下载)
Mar 10 PHP
php 伪静态之IIS篇
Jun 02 PHP
ThinkPHP3.1新特性之查询条件预处理简介
Jun 19 PHP
smarty内置函数{loteral}、{ldelim}和{rdelim}用法实例
Jan 22 PHP
CodeIgniter与PHP5.6的兼容问题
Jul 16 PHP
WordPress中登陆后关闭登陆页面及设置用户不可见栏目
Dec 31 PHP
PHP加密技术的简单实现
Sep 04 PHP
PHP数据库操作二:memcache用法分析
Aug 16 PHP
PHP流Streams、包装器wrapper概念与用法实例详解
Nov 17 PHP
PHP让网站移动访问更加友好方法
Feb 14 PHP
如何重写Laravel异常处理类详解
Dec 20 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
桌面中心(四)数据显示
2006/10/09 PHP
微信公众号支付之坑:调用支付jsapi缺少参数 timeStamp等错误解决方法
2016/01/12 PHP
Javascript客户端将指定区域导出到Word、Excel的代码
2008/10/22 Javascript
JavaScript入门教程(5) js Screen屏幕对象
2009/01/31 Javascript
ASP Json Parser修正版
2009/12/06 Javascript
Extjs列表详细信息窗口新建后自动加载解决方法
2010/04/02 Javascript
关于window.pageYOffset和document.documentElement.scrollTop
2011/04/05 Javascript
javascript中关于break,continue的特殊用法与介绍
2012/05/24 Javascript
Mac/Windows下如何安装Node.js
2013/11/22 Javascript
javascript学习笔记(八)正则表达式
2014/10/08 Javascript
Jquery修改页面标题title其它JS失效的解决方法
2014/10/31 Javascript
javascript中slice(),splice(),split(),substring(),substr()使用方法
2015/03/13 Javascript
Query常用DIV操作获取和设置长度宽度的实现方法
2016/09/19 Javascript
原生JS实现移动端web轮播图详解(结合Tween算法造轮子)
2017/09/10 Javascript
html中通过JS获取JSON数据并加载的方法
2017/11/30 Javascript
通过封装scroll.js 获取滚动条的值
2018/07/13 Javascript
nodejs 生成和导出 word的实例代码
2018/07/31 NodeJs
使用vue 国际化i18n 实现多实现语言切换功能
2018/10/11 Javascript
js实现动态添加上传文件页面
2018/10/22 Javascript
JS拖动选择table里的单元格完整实例【基于jQuery】
2019/05/28 jQuery
百度小程序自定义通用toast组件
2019/07/17 Javascript
微信小程序导入Vant报错VM292:1 thirdScriptError的解决方法
2019/08/01 Javascript
vue 实现input表单元素的disabled示例
2019/10/28 Javascript
vue改变循环遍历后的数据实例
2019/11/07 Javascript
JS中队列和双端队列实现及应用详解
2020/09/29 Javascript
[03:06]V社市场总监Dota2项目负责人Erik专访:希望更多中国玩家加入DOTA2
2014/07/11 DOTA
Python cookbook(数据结构与算法)从任意长度的可迭代对象中分解元素操作示例
2018/02/13 Python
pycharm远程linux开发和调试代码的方法
2018/07/17 Python
对python调用RPC接口的实例详解
2019/01/03 Python
python调用matlab的m自定义函数方法
2019/02/18 Python
一文秒懂python读写csv xml json文件各种骚操作
2019/07/04 Python
tensorflow2.0的函数签名与图结构(推荐)
2020/04/28 Python
如何把外网python虚拟环境迁移到内网
2020/05/18 Python
英国现代市场:ARKET
2019/04/10 全球购物
初中班主任教育随笔
2015/08/15 职场文书
html实现随机点名器的示例代码
2021/04/02 Javascript