首页 后端开发 php教程 如何在前台触发后台异步批量发送短信而不影响用户体验?

如何在前台触发后台异步批量发送短信而不影响用户体验?

Mar 31, 2025 pm 11:45 PM
redis red talk

本文介绍如何实现前台触发后台异步批量发送短信,且不影响用户体验。 用户点击按钮后,前台立即返回成功提示,后台则异步执行数据库查询、Redis缓存写入和短信发送。

如何在前台触发后台异步批量发送短信而不影响用户体验?

核心思路:异步处理

该方案利用异步处理机制,将耗时操作移至后台执行,避免阻塞前台。 具体步骤如下:

  1. 前台Ajax请求: 用户点击发送按钮,前端使用Ajax向后台发送请求,请求参数包含短信模板ID、手机号列表和短信内容。

    $.ajax({
        url: '/send-sms',
        type: 'POST',
        data: { template_id: 123, mobiles: ['13800138000', '13800138001'], content: '测试短信' },
        success: function(response) {
            alert('短信发送请求已提交');
        },
        error: function(error) {
            alert('请求失败:'   error.responseText);
        }
    });
    登录后复制
  2. 后台接收请求并返回响应: 后台接收Ajax请求后,立即返回成功响应(JSON格式),告知前台请求已接收。 关键在于,短信发送逻辑被放入异步任务中。

    // 后台控制器方法
    public function sendSmsAction() {
        $templateId = $_POST['template_id'];
        $mobiles = $_POST['mobiles'];
        $content = $_POST['content'];
    
        // 立即返回成功响应
        echo json_encode(['success' => true, 'message' => '请求已接收,短信发送任务已启动']);
    
        // 将任务添加到队列(例如使用Redis或RabbitMQ)
        $this->addTaskToQueue($templateId, $mobiles, $content);
    }
    登录后复制
  3. 异步任务处理: addTaskToQueue 方法将短信发送任务添加到消息队列中。 一个独立的后台进程(例如使用队列工作者)持续监听队列,取出任务并执行。

    // 添加任务到队列 (示例使用Redis)
    private function addTaskToQueue($templateId, $mobiles, $content) {
        $redis = new Redis();
        $redis->connect('127.0.0.1', 6379);
        $redis->lPush('sms_queue', json_encode(['template_id' => $templateId, 'mobiles' => $mobiles, 'content' => $content]));
    }
    登录后复制
  4. 队列工作者: 队列工作者从 sms_queue 队列中获取任务,执行短信发送,并处理错误日志。

    // 队列工作者 (示例)
    while (true) {
        $task = $redis->rPop('sms_queue');
        if ($task) {
            $data = json_decode($task, true);
            $result = $this->sendSms($data['template_id'], $data['mobiles'], $data['content']);
            if ($result !== true) {
                // 记录错误日志
                error_log("短信发送失败: " . $result);
            }
        }
        sleep(1); // 避免CPU占用过高
    }
    登录后复制
  5. 短信发送函数 (sendSms): 该函数调用短信服务商API发送短信。

通过以上步骤,前台用户体验不受影响,后台则高效地处理批量短信发送。 选择合适的队列系统(Redis、RabbitMQ、Beanstalkd等)至关重要,它能保证任务可靠地被处理,并支持分布式环境。 此外,完善的错误处理和日志记录机制也必不可少。

以上是如何在前台触发后台异步批量发送短信而不影响用户体验?的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

<🎜>:泡泡胶模拟器无穷大 - 如何获取和使用皇家钥匙
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆树的耳语 - 如何解锁抓钩
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系统,解释
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1667
14
CakePHP 教程
1426
52
Laravel 教程
1328
25
PHP教程
1273
29
C# 教程
1255
24
如何利用Redis缓存方案高效实现产品排行榜列表的需求? 如何利用Redis缓存方案高效实现产品排行榜列表的需求? Apr 19, 2025 pm 11:36 PM

Redis缓存方案如何实现产品排行榜列表的需求?在开发过程中,我们常常需要处理排行榜的需求,例如展示一个�...

使用DICR/YII2-Google将Google API集成在YII2中 使用DICR/YII2-Google将Google API集成在YII2中 Apr 18, 2025 am 11:54 AM

vProcesserazrabotkiveb被固定,мнелостольностьстьс粹馏标д都LeavallySumballanceFriablanceFaumDoptoMatification,Čtookazalovnetakprosto,kakaožidal.posenesko

laravel8 的优化点 laravel8 的优化点 Apr 18, 2025 pm 12:24 PM

Laravel 8 针对性能优化提供了以下选项:缓存配置:使用 Redis 缓存驱动、缓存门面、缓存视图和页面片段。数据库优化:建立索引、使用查询范围、使用 Eloquent 关系。JavaScript 和 CSS 优化:使用版本控制、合并和缩小资产、使用 CDN。代码优化:使用 Composer 安装包、使用 Laravel 助手函数、遵循 PSR 标准。监控和分析:使用 Laravel Scout、使用 Telescope、监控应用程序指标。

Spring Boot中OAuth2Authorization对象Redis缓存失败怎么办? Spring Boot中OAuth2Authorization对象Redis缓存失败怎么办? Apr 19, 2025 pm 08:03 PM

SpringBoot中使用Redis缓存OAuth2Authorization对象在SpringBoot应用中,使用SpringSecurityOAuth2AuthorizationServer...

REDIS的角色:探索数据存储和管理功能 REDIS的角色:探索数据存储和管理功能 Apr 22, 2025 am 12:10 AM

Redis在数据存储和管理中扮演着关键角色,通过其多种数据结构和持久化机制成为现代应用的核心。1)Redis支持字符串、列表、集合、有序集合和哈希表等数据结构,适用于缓存和复杂业务逻辑。2)通过RDB和AOF两种持久化方式,Redis确保数据的可靠存储和快速恢复。

WebSocket服务器返回401后浏览器无反应的原因是什么?如何解决? WebSocket服务器返回401后浏览器无反应的原因是什么?如何解决? Apr 19, 2025 pm 02:21 PM

WebSocket服务器返回401后浏览器无反应的处理方法在使用Netty开发WebSocket服务器时,经常会遇到验证token的需求。�...

欧易交易所app官网下载苹果手机下载 欧易交易所app官网下载苹果手机下载 Apr 28, 2025 pm 06:57 PM

欧易交易所app支持苹果手机下载,访问官网,点击“苹果手机”选项,在App Store中获取并安装,注册或登录后即可进行加密货币交易。

See all articles