首頁 後端開發 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

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

HDFS配置CentOS需要哪些步驟 HDFS配置CentOS需要哪些步驟 Apr 14, 2025 pm 06:42 PM

在CentOS系統上搭建Hadoop分佈式文件系統(HDFS)需要多個步驟,本文提供一個簡要的配置指南。一、前期準備安裝JDK:在所有節點上安裝JavaDevelopmentKit(JDK),版本需與Hadoop兼容。可從Oracle官網下載安裝包。環境變量配置:編輯/etc/profile文件,設置Java和Hadoop的環境變量,使系統能夠找到JDK和Hadoop的安裝路徑。二、安全配置:SSH免密登錄生成SSH密鑰:在每個節點上使用ssh-keygen命令

centos7 如何安裝redis centos7 如何安裝redis Apr 14, 2025 pm 08:21 PM

從 Redis 官方源下載源碼包編譯安裝,保證最新穩定版本,可個性化定制。具體步驟如下:更新軟件包列表創建 Redis 目錄下載 Redis 源碼包解壓源碼包編譯安裝配置並修改 Redis 配置啟動 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

HDFS配置CentOS需要修改哪些文件 HDFS配置CentOS需要修改哪些文件 Apr 14, 2025 pm 07:27 PM

在CentOS上配置Hadoop分佈式文件系統(HDFS)時,需要修改以下關鍵配置文件:core-site.xml:fs.defaultFS:指定HDFS的默認文件系統地址,例如hdfs://localhost:9000。 hadoop.tmp.dir:指定Hadoop臨時文件的存儲目錄。 hadoop.proxyuser.root.hosts和hadoop.proxyuser.ro

HDFS文件系統在CentOS上的使用技巧 HDFS文件系統在CentOS上的使用技巧 Apr 14, 2025 pm 07:30 PM

CentOS系統下HDFS文件系統的安裝、配置及優化指南本文將指導您如何在CentOS系統上安裝、配置和優化Hadoop分佈式文件系統(HDFS)。 HDFS安裝與配置Java環境安裝:首先,確保已安裝合適的Java環境。編輯/etc/profile文件,添加以下內容,並將/usr/lib/java-1.8.0/jdk1.8.0_144替換為您的實際Java安裝路徑:exportJAVA_HOME=/usr/lib/java-1.8.0/jdk1.8.0_144exportPATH=$J

如何利用Redis緩存方案高效實現產品排行榜列表的需求? 如何利用Redis緩存方案高效實現產品排行榜列表的需求? Apr 19, 2025 pm 11:36 PM

Redis緩存方案如何實現產品排行榜列表的需求?在開發過程中,我們常常需要處理排行榜的需求,例如展示一個�...

laravel8 的優化點 laravel8 的優化點 Apr 18, 2025 pm 12:24 PM

Laravel 8 針對性能優化提供了以下選項:緩存配置:使用 Redis 緩存驅動、緩存門面、緩存視圖和頁面片段。數據庫優化:建立索引、使用查詢範圍、使用 Eloquent 關係。 JavaScript 和 CSS 優化:使用版本控制、合併和縮小資產、使用 CDN。代碼優化:使用 Composer 安裝包、使用 Laravel 助手函數、遵循 PSR 標準。監控和分析:使用 Laravel Scout、使用 Telescope、監控應用程序指標。

See all articles