群發簡訊和群發電郵的隊列問題

來源:互聯網
上載者:User
最近要做群發簡訊和群發電郵的程式,因為某些限制,都是多次去請求響應的介面,達到群發的效果。

然後就出現了這樣的問題:我需要給100個客戶發電郵,介面的回應時間平均在2s,然後我的php需要對介面進行100次post操作,長達200s,然後頁面就逾時了……

在不改動PHP設定的前提下,如何解決這個問題?

我自己能想到兩個方案:

  1. 每次post一個,然後頁面跳轉,就像國內某些開來源程式產生靜態頁那樣,每次只做一個小請求,比如10s可以完成五次post,然後跳轉到新頁面,傳入start=10 start=15這樣的參數,不斷跳轉跳轉重新整理重新整理,最後完成這個任務。缺點是這樣需要用戶端一直守著瀏覽器……
  2. 把發送訊息的任務存在資料庫裡,做一個send.php之類的檔案,每次取一個或幾個訊息去發送,然後用crond或者計劃任務每秒之行send.php檢查有沒有新任務,有的話就執行任務。

我想知道還有沒有別的簡單易行的方法,比如我曾經聽說過rabbitMQ什麼的,但是沒弄明白。。。

回複內容:

最近要做群發簡訊和群發電郵的程式,因為某些限制,都是多次去請求響應的介面,達到群發的效果。

然後就出現了這樣的問題:我需要給100個客戶發電郵,介面的回應時間平均在2s,然後我的php需要對介面進行100次post操作,長達200s,然後頁面就逾時了……

在不改動PHP設定的前提下,如何解決這個問題?

我自己能想到兩個方案:

  1. 每次post一個,然後頁面跳轉,就像國內某些開來源程式產生靜態頁那樣,每次只做一個小請求,比如10s可以完成五次post,然後跳轉到新頁面,傳入start=10 start=15這樣的參數,不斷跳轉跳轉重新整理重新整理,最後完成這個任務。缺點是這樣需要用戶端一直守著瀏覽器……
  2. 把發送訊息的任務存在資料庫裡,做一個send.php之類的檔案,每次取一個或幾個訊息去發送,然後用crond或者計劃任務每秒之行send.php檢查有沒有新任務,有的話就執行任務。

我想知道還有沒有別的簡單易行的方法,比如我曾經聽說過rabbitMQ什麼的,但是沒弄明白。。。

放在背景工作執行是一個好辦法,應該也是最好的方法,不需要rabbitMQ,這隻會讓問題複雜化。但實際上有個方法可以讓你的php不逾時,即使使用者瀏覽器串連斷開了,它也會繼續執行下去,那就是在你的php檔案最開始加上以下兩行

ignore_user_abort(true);set_time_limit(0);

rabbitMQ和你提供的第二種方案類似,唯一不同的就是,你的方案需要不斷的掃描任務表,資料量大的情況下,負載會很高,效率比較低。
使用rabbitMQ的話就是有任務你就處理,就是常說的訊息驅動。訊息驅動這項技術在需要非同步處理的程式中很常見。屬於一種高效的方案。你可以獨立出一個任務系統,專門來處理需要非同步處理比較耗時的業務,像郵件的發送,文檔、視頻的轉換,圖片的處理等等。這個方案其實很清晰,很簡單。
希望能給你帶來參考。

我現在的做法是這樣的。用其他語言,如:.NET寫一個郵件佇列服務。然後PHP用SOCKET的方式POST但是不等待。剩下的事情交給.NET那邊來做。

需要考慮的因素是:
1. 對及時性要求高不高?
2. 什麼情況下觸發需要群發 EMAIL 的動作?

方案一: 先把請求收集入庫, 每一個頁面請求的時候處理一個請求, 分髮式處理, 適合一般的 web 應用, 不清楚你的狀況, 如果是每一個頁面請求都需要觸發群發 EMAIL 的動作的話 ... ;

方案二: 如果對及時性要求不高的話, 可以系統工具如 cron , 首先把請求收集起來入庫, 寫一個處理請求的指令碼, 在淩晨的時候伺服器負載不高的情況下利用 cron 執行此指令碼.

在2的方案裡面,如果量不大是沒問題的,
如果量大了,還是得考慮基於訊息佇列(mq,redis),在後台多個消費程式同時消費(發送)
我們系統每天百萬的簡訊發送基本就是這麼做!

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.