PHP 基于memcache的消息队列短信群发

由于php自带的curl_muti请求如果并发量太大会出现浏览器卡死响应太慢的问题,设计目的主要是在浏览器响应的120s之内完成短信的群发

所以利用消息队列来解决大并发的curl请求。

设计思路

将前台传来的手机号存入数组->是否大于队列最大长度->如果大于返回false,否则将手机号存入队列中

->从队列中取出m条数据并用curl_multi_init方式发送请求->无限循环上一步直到队列长度为0->清空队列,释放缓存

代码如下:

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左右

posted @ 2019-03-11 16:16  新人灰  阅读(453)  评论(0编辑  收藏  举报