如何通過前臺點擊按鈕實現后臺異步批量發送短信?

如何通過前臺點擊按鈕實現后臺異步批量發送短信?

前臺按鈕觸發后臺異步批量短信發送:優化用戶體驗的關鍵

現代Web應用注重用戶體驗,尤其對于批量發送短信這種耗時操作。 本文介紹如何通過異步處理,在前臺點擊按鈕后立即返回成功提示,而后臺則異步執行數據庫查詢、redis寫入和短信發送等任務。

實現步驟:

  1. 前臺ajax請求: 用戶點擊“發送短信”按鈕,使用AJAX向后臺發送請求。AJAX請求允許前臺立即獲得響應,無需等待后臺處理完成。

  2. 后臺立即返回響應: 后臺接收AJAX請求后,立即返回json格式的響應,例如{“success”: true, “message”: “短信發送請求已接收”},告知前臺請求已成功提交。

  3. 后臺數據處理和redis緩存: 后臺獲取短信模板ID、手機號列表和短信內容,將這些數據寫入Redis緩存,提高數據訪問速度并支持分布式處理。

  4. 異步短信發送任務: 后臺啟動一個異步任務(例如使用隊列或定時任務),從Redis讀取數據并調用短信服務商API發送短信。 錯誤信息應記錄到日志中,方便后續排查。

代碼示例 (php):

以下代碼示例展示了核心步驟,需要根據實際環境和短信服務商API進行調整。

前臺 (JavaScript):

$.ajax({   url: '/send-sms',   type: 'POST',   data: {template_id: 123, mobiles: ['13800138000', '13800138001'], content: '測試短信'},   success: function(response) {     if (response.success) {       alert(response.message);     } else {       alert('發送失敗: ' + response.message);     }   },   error: function(xhr, status, error) {     alert('發送失敗: ' + error);   } });

后臺 (PHP):

<?php // 后臺控制器方法 public function sendSms() {     $templateId = $_POST['template_id'];     $mobiles = $_POST['mobiles'];     $content = $_POST['content'];      // 立即返回成功響應     echo json_encode(['success' => true, 'message' => '短信發送請求已接收']);      // 異步任務處理 (使用隊列或其他異步機制)     $this->dispatchSmsTask($templateId, $mobiles, $content); }  // 異步短信發送任務 (示例,需根據實際情況修改) private function dispatchSmsTask($templateId, $mobiles, $content) {     // 使用Redis隊列或其他消息隊列     $redis = new Redis();     $redis->connect('127.0.0.1', 6379);     $redis->lPush('sms_queue', json_encode(['template_id' => $templateId, 'mobiles' => $mobiles, 'content' => $content]));      // 啟動worker進程處理隊列 (需自行實現worker邏輯)     // ... }  // worker進程處理短信發送 (示例,需根據實際情況修改) // ... 從Redis隊列獲取任務,調用短信API發送短信,記錄日志 ... ?>

此示例使用Redis作為消息隊列,需要自行實現worker進程來消費隊列中的任務并發送短信。 實際應用中,可能需要更健壯的錯誤處理、重試機制和監控功能。 選擇合適的異步任務處理框架(如rabbitmq, Beanstalkd, 或PHP內置的異步函數)將簡化開發和提高可靠性。 務必根據短信服務商API文檔編寫短信發送邏輯。

? 版權聲明
THE END
喜歡就支持一下吧
點贊14 分享