需要做一個(gè)多用戶群發(fā)模板消息的功能。多個(gè)用戶同時(shí)給自己上千個(gè)會(huì)員發(fā)送模板消息。
還有定時(shí)發(fā)送任務(wù)。但是這里有個(gè)問(wèn)題。在發(fā)送任務(wù)稍微多點(diǎn)比如幾百上千的時(shí)候。發(fā)送的數(shù)據(jù)會(huì)有延遲1-2個(gè)小時(shí)甚至更久才能發(fā)送出去。請(qǐng)教下是哪兒出了問(wèn)題?
以下是代碼。
// 開(kāi)啟的端口
$worker = new Worker();
// 啟動(dòng)多少服務(wù)進(jìn)程
$worker->count = 100;
// worker名稱,php start.php status 時(shí)展示使用
//$worker->name = 'redis';
$worker->onWorkerStart = function () {
$redis = new Rediss;
$redis->pconnect('127.0.0.1', 6379);
$Weixin = new Weixin();
$queue = array("sendmsg","tuikuanmsg","renewsendmsg");
//$queue = "sendmsg";
while($redis){
$time = time();
$ret = $redis->blPop($queue, 60);
if($ret && count($ret) == 2 && $ret[1]) {
$info = json_decode($ret[1],true);
$wxfdid=$info["wxfdid"];
$appid=$info["appid"];
$secret=$info["secret"];
$token = checkAccessTokenFD($redis,$wxfdid,$appid,$secret);
if(!$token) {
echo "token miss";
continue;
}
if($ret[0] == "sendmsg"){
if($info["sendtype"] == 1 || $info["sendtype"] == 3 || ($info["sendtype"] == 2 && ($info["sendtime"]-$time) <= 3)){
$Weixin->sendMsg($info, $token);
if($info["sendtype"] == 3){
$info["sendtype"] = 2;
$info["materialstitle"] = "【再次通知】".$info["materialstitle"];
$info["title"] = "【再次通知】".$info["title"];
$info["mbtitle"] = "【再次通知】".$info["mbtitle"];
$redis->lPush("sendmsg", json_encode($info));
}
}elseif($info["sendtype"] == 2 && ($info["sendtime"]-$time) > 3){
$redis->lPush("sendmsg", $ret[1]);
}
}elseif($ret[0] == "tuikuanmsg"){
$Weixin->tuikuanMsg($info, $token);
}elseif($ret[0] == "renewsendmsg"){
$Weixin->renewSendMsg($info, $token);
}
}
}
};
Worker::runAll();
這是代碼
服務(wù)器的帶寬 10M,內(nèi)存 8G,CPU 8核
有誰(shuí)能幫助解決下問(wèn)題。有償
不太明白你的redis是什么意思,但感覺(jué)問(wèn)題就出在 $ret = $redis->blPop($queue, 60);阻塞了