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

熱門話題

Java教學
1677
14
CakePHP 教程
1431
52
Laravel 教程
1334
25
PHP教程
1280
29
C# 教程
1257
24
如何利用Redis緩存方案高效實現產品排行榜列表的需求? 如何利用Redis緩存方案高效實現產品排行榜列表的需求? Apr 19, 2025 pm 11:36 PM

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

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確保數據的可靠存儲和快速恢復。

歐易交易所app官網下載蘋果手機下載 歐易交易所app官網下載蘋果手機下載 Apr 28, 2025 pm 06:57 PM

歐易交易所app支持蘋果手機下載,訪問官網,點擊“蘋果手機”選項,在App Store中獲取並安裝,註冊或登錄後即可進行加密貨幣交易。

REDIS:了解其架構和目的 REDIS:了解其架構和目的 Apr 26, 2025 am 12:11 AM

Redis是一种内存数据结构存储系统,主要用作数据库、缓存和消息代理。它的核心特点包括单线程模型、I/O多路复用、持久化机制、复制与集群功能。Redis在实际应用中常用于缓存、会话存储和消息队列,通过选择合适的数据结构、使用管道和事务、以及进行监控和调优,可以显著提升其性能。

使用RedisTemplate進行批量查詢時,為什麼返回值會為空? 使用RedisTemplate進行批量查詢時,為什麼返回值會為空? Apr 19, 2025 pm 10:15 PM

使用RedisTemplate進行批量查詢時為何返回值為空?在使用RedisTemplate進行批量查詢操作時,可能會遇到返回的結果�...

如何理解C  中的DMA操作? 如何理解C 中的DMA操作? Apr 28, 2025 pm 10:09 PM

DMA在C 中是指DirectMemoryAccess,直接內存訪問技術,允許硬件設備直接與內存進行數據傳輸,不需要CPU干預。 1)DMA操作高度依賴於硬件設備和驅動程序,實現方式因係統而異。 2)直接訪問內存可能帶來安全風險,需確保代碼的正確性和安全性。 3)DMA可提高性能,但使用不當可能導致系統性能下降。通過實踐和學習,可以掌握DMA的使用技巧,在高速數據傳輸和實時信號處理等場景中發揮其最大效能。

See all articles