因爲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