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

转载于:https://www.cnblogs.com/greyhwang/p/10511338.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值