如何在前台觸發後台異步批量發送短信而不影響用戶體驗?
本文介紹如何實現前台觸發後台異步批量發送短信,且不影響用戶體驗。 用戶點擊按鈕後,前台立即返回成功提示,後台則異步執行數據庫查詢、Redis緩存寫入和短信發送。
核心思路:異步處理
該方案利用異步處理機制,將耗時操作移至後台執行,避免阻塞前台。 具體步驟如下:
-
前台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); } });
登入後複製 -
後台接收請求並返迴響應:後台接收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); }
登入後複製 -
異步任務處理:
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])); }
登入後複製 -
隊列工作者:隊列工作者從
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佔用過高}
登入後複製 短信發送函數(
sendSms
) : 該函數調用短信服務商API發送短信。
通過以上步驟,前台用戶體驗不受影響,後台則高效地處理批量短信發送。 選擇合適的隊列系統(Redis、RabbitMQ、Beanstalkd等)至關重要,它能保證任務可靠地被處理,並支持分佈式環境。 此外,完善的錯誤處理和日誌記錄機制也必不可少。
以上是如何在前台觸發後台異步批量發送短信而不影響用戶體驗?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

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

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

SpringBoot中使用Redis緩存OAuth2Authorization對像在SpringBoot應用中,使用SpringSecurityOAuth2AuthorizationServer...

Redis在數據存儲和管理中扮演著關鍵角色,通過其多種數據結構和持久化機製成為現代應用的核心。 1)Redis支持字符串、列表、集合、有序集合和哈希表等數據結構,適用於緩存和復雜業務邏輯。 2)通過RDB和AOF兩種持久化方式,Redis確保數據的可靠存儲和快速恢復。

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

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

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

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