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实现单链表的实例代码
Mar 22 PHP
php float不四舍五入截取浮点型字符串方法总结
Oct 28 PHP
php中的strpos使用示例
Feb 27 PHP
destoon安全设置中需要设置可写权限的目录及文件
Jun 21 PHP
PHP远程采集图片详细教程
Jul 01 PHP
PHP CURL 内存泄露问题解决方法
Feb 12 PHP
详细解读PHP中接口的应用
Aug 12 PHP
24条货真价实的PHP代码优化技巧
Jul 28 PHP
PHP实现求连续子数组最大和问题2种解决方法
Dec 26 PHP
PHP convert_cyr_string()函数讲解
Feb 13 PHP
微信推送功能实现方式图文详解
Jul 12 PHP
PHP标准库 (SPL)――Countable用法示例
Jun 05 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
php 安全过滤函数代码
2011/05/07 PHP
使用PHP实现阻止用户上传成人照片或者裸照
2014/12/25 PHP
php+jQuery+Ajax实现点赞效果的方法(附源码下载)
2020/07/21 PHP
PHP文件上传之多文件上传的实现思路
2016/01/27 PHP
thinkPHP5.0框架开发规范简介
2017/03/25 PHP
php类自动装载、链式操作、魔术方法实现代码
2017/07/23 PHP
让whoops帮我们告别ThinkPHP6的异常页面
2020/03/02 PHP
mouse_on_title.js
2006/08/25 Javascript
JS对外部文件的加载及对IFRMAME的加载的实现,当加载完成后,指定指向方法(方法回调)
2011/07/04 Javascript
基于jquery实现漂亮的动态信息提示效果
2011/08/02 Javascript
angularjs中的单元测试实例
2014/12/06 Javascript
jquery分析文本里url或邮件地址为真实链接的方法
2015/06/20 Javascript
牛叉的Jquery——Jquery与DOM对象的互相转换及DOM的三种操作
2015/10/29 Javascript
初识angular框架后的所思所想
2016/02/19 Javascript
jquery trigger函数执行两次的解决方法
2016/02/29 Javascript
js阻止默认浏览器行为与冒泡行为的实现代码
2016/05/15 Javascript
javascript实现用户点击数量统计
2016/12/25 Javascript
jQuery插件HighCharts绘制2D带Label的折线图效果示例【附demo源码下载】
2017/03/08 Javascript
JS判断非空至少输入两个字符的简单实现方法
2017/06/23 Javascript
vue-router之nuxt动态路由设置的两种方法小结
2018/09/26 Javascript
谈谈React中的Render Props模式
2018/12/06 Javascript
vue添加class样式实例讲解
2019/02/12 Javascript
python实现文件分组复制到不同目录的例子
2014/06/04 Python
Python常见加密模块用法分析【MD5,sha,crypt模块】
2017/05/24 Python
python使用pil库实现图片合成实例代码
2018/01/20 Python
Python代码块批量添加Tab缩进的方法
2018/06/25 Python
python中for循环变量作用域及用法详解
2019/11/05 Python
Django {{ MEDIA_URL }}无法显示图片的解决方式
2020/04/07 Python
浅谈django channels 路由误导
2020/05/28 Python
商场端午节活动方案
2014/01/29 职场文书
就业协议书的作用
2014/04/11 职场文书
技术合作协议书范本
2014/04/18 职场文书
新学期红领巾广播稿
2014/10/04 职场文书
研究生导师评语
2014/12/31 职场文书
python的netCDF4批量处理NC格式文件的操作方法
2022/03/21 Python