0

0

如何通过前台按钮触发和后台异步处理实现高效的批量发送短信?

花韻仙語

花韻仙語

发布时间:2025-03-17 08:46:11

|

891人浏览过

|

来源于php中文网

原创

如何通过前台按钮触发和后台异步处理实现高效的批量发送短信?

异步批量短信发送:提升效率,优化用户体验

批量发送短信是许多应用的常见需求,例如用户注册、活动通知等。如何既保证效率,又不影响用户体验呢?本文介绍一种基于前台触发、后台异步处理的方案。用户点击发送按钮后,系统立即返回确认信息,后台则异步执行数据库查询、缓存写入以及短信发送等操作。

实现步骤详解

  1. 前台AJAX请求: 用户点击发送按钮,前台使用AJAX向后台发送请求,避免页面刷新,提升用户体验。

     $.ajax({
         url: '/send-sms',
         type: 'POST',
         data: {template_id: 123, mobiles: ['13800138000', '13800138001'], content: '测试短信'},
         success: function(result) {
             alert('短信发送请求已提交');
         }
     });
  2. 后台快速响应: 后台收到请求后,立即返回成功响应,无需等待耗时操作完成。

     public function sendSms() {
         $templateId = $_POST['template_id'];
         $mobiles = $_POST['mobiles'];
         $content = $_POST['content'];
         // 返回JSON响应
         echo json_encode(['success' => true, 'message' => '请求已提交']);
         // 异步处理短信发送
         $this->asyncSendSms($templateId, $mobiles, $content);
     }
  3. 异步任务处理: 后台异步任务首先从数据库获取短信数据,写入Redis缓存。

    琅琅配音
    琅琅配音

    全能AI配音神器

    下载
     private function asyncSendSms($templateId, $mobiles, $content) {
         $redis = new Redis();
         $redis->connect('127.0.0.1', 6379);
         $redis->auth('redis_password');
         // 将数据存入Redis队列
         $data = ['template_id' => $templateId, 'mobiles' => $mobiles, 'content' => $content];
         $redis->lPush('sms_queue', json_encode($data));
         // 启动异步任务 (使用合适的异步任务处理机制,例如队列管理器)
         // ...
     }
  4. 队列发送短信: 异步任务从Redis队列获取数据,调用短信服务商API发送短信。错误信息会被记录到日志中,方便后续排查。

     public function processSmsQueue() {
         $redis = new Redis();
         $redis->connect('127.0.0.1', 6379);
         $redis->auth('redis_password');
         // 从Redis队列获取数据
         $dataStr = $redis->rPop('sms_queue');
         if ($dataStr) {
             $data = json_decode($dataStr, true);
             // 调用短信服务商API
             $result = $this->sendSmsApi($data['template_id'], $data['mobiles'], $data['content']);
             // 记录日志
             if ($result !== true) {
                 error_log("短信发送失败: " . $result);
             }
             // 继续处理队列中的下一条消息
             // ...
         }
     }

此方案通过前台AJAX和后台异步任务,有效地将短信发送与用户交互分离,提高了系统效率和用户体验。 请根据实际情况选择合适的异步任务处理机制,例如使用消息队列服务(如RabbitMQ、Kafka)或进程管理工具(如Supervisor)。

相关专题

更多
rabbitmq和kafka有什么区别
rabbitmq和kafka有什么区别

rabbitmq和kafka的区别:1、语言与平台;2、消息传递模型;3、可靠性;4、性能与吞吐量;5、集群与负载均衡;6、消费模型;7、用途与场景;8、社区与生态系统;9、监控与管理;10、其他特性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

202

2024.02.23

ajax教程
ajax教程

php中文网为大家带来ajax教程合集,Ajax是一种用于创建快速动态网页的技术。通过在后台与服务器进行少量数据交换,Ajax可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。php中文网还为大家带来ajax的相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

157

2023.06.14

ajax中文乱码解决方法
ajax中文乱码解决方法

ajax中文乱码解决方法有设置请求头部的字符编码、在服务器端设置响应头部的字符编码和使用encodeURIComponent对中文进行编码。本专题为大家提供ajax中文乱码相关的文章、下载、课程内容,供大家免费下载体验。

160

2023.08.31

ajax传递中文乱码怎么办
ajax传递中文乱码怎么办

ajax传递中文乱码的解决办法:1、设置统一的编码方式;2、服务器端编码;3、客户端解码;4、设置HTTP响应头;5、使用JSON格式。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

116

2023.11.15

ajax网站有哪些
ajax网站有哪些

使用ajax的网站有谷歌、维基百科、脸书、纽约时报、亚马逊、stackoverflow、twitter、hacker news、shopify和basecamp等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

231

2024.09.24

kafka消费者组有什么作用
kafka消费者组有什么作用

kafka消费者组的作用:1、负载均衡;2、容错性;3、广播模式;4、灵活性;5、自动故障转移和领导者选举;6、动态扩展性;7、顺序保证;8、数据压缩;9、事务性支持。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

167

2024.01.12

kafka消费组的作用是什么
kafka消费组的作用是什么

kafka消费组的作用:1、负载均衡;2、容错性;3、灵活性;4、高可用性;5、扩展性;6、顺序保证;7、数据压缩;8、事务性支持。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

149

2024.02.23

rabbitmq和kafka有什么区别
rabbitmq和kafka有什么区别

rabbitmq和kafka的区别:1、语言与平台;2、消息传递模型;3、可靠性;4、性能与吞吐量;5、集群与负载均衡;6、消费模型;7、用途与场景;8、社区与生态系统;9、监控与管理;10、其他特性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

202

2024.02.23

c++ 根号
c++ 根号

本专题整合了c++根号相关教程,阅读专题下面的文章了解更多详细内容。

52

2026.01.23

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
进程与SOCKET
进程与SOCKET

共6课时 | 0.4万人学习

Redis+MySQL数据库面试教程
Redis+MySQL数据库面试教程

共72课时 | 6.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号