PHP 基於memcache的消息隊列短信羣發

因爲php自帶的curl_muti請求若是並髮量太大會出現瀏覽器卡死響應太慢的問題,設計目的主要是在瀏覽器響應的120s以內完成短信的羣發php

因此利用消息隊列來解決大併發的curl請求。數組

設計思路瀏覽器

將前臺傳來的手機號存入數組->是否大於隊列最大長度->若是大於返回false,不然將手機號存入隊列中緩存

->從隊列中取出m條數據並用curl_multi_init方式發送請求->無限循環上一步直到隊列長度爲0->清空隊列,釋放緩存併發

代碼以下:curl

function muti_send($mobile_array,$text,$max=10000){
        if(count($mobile_array)>$max){return false;}//判斷數組長度是否超過隊列最大長度
        $memque = new memqueue('group',600);//設置隊列緩存過時時間10分鐘
        
        foreach ($mobile_array as $key=>$value){ //取出電話添加到隊列
            $memque->add($value);
        }
        $len=$memque->getQueueLength();//獲取隊列長度
        while ($len>0){
            $data=$memque->get(200);//每次取出200條數據
            foreach ($data as $k=>$v){
                $mobile[]=$v;
            }//取出數值放入數組中
            $this->muti_send_curl($mobile, $text);//發送請求
            unset($mobile);//清空當前循環次數的數組
            $len=$memque->getQueueLength();//得到當前隊列長度
        }
        $memque->clear();//清空隊列
        memcache_flush();//清除緩存
    }

通過測驗後隊列長度最大爲10000,每次發送200條請求爲最佳,10000條短信羣發只需81s左右this

相關文章
相關標籤/搜索