我現(xiàn)在在做一個販賣機(jī)后臺的項(xiàng)目,坑爹的是販賣機(jī)的傳輸協(xié)議是http輪詢。
然后我做了以下處理
//...............
$redis = new redis();
$count = 0;
$loop = 2;
$res = [];
while($count < 60 && empty($res){ //輪詢業(yè)務(wù)處理
if(empty($res)){
$key = 'goodsUpdate_112233';
if($id = $redis->lpop($key)){ //查詢redis隊(duì)列是否有需要出貨的訂單
$sale_model = new SaleModel();
$res = $sale_model->Shipment($id,$machine); //查詢生成出貨通知
}
}
/**
* 其他業(yè)務(wù)處理
* .................
**/
if(empty($res)){
sleep($loop);
$count += $loop;
)
}
//..................
Http::header('Content-Type:application/json; charset=utf-8');
$connection->send(json_encode($res,JSON_UNESCAPED_UNICODE));
但是當(dāng)運(yùn)行的時候,查詢狀態(tài)出現(xiàn)如下的狀態(tài)
我想問問用了sleep()是不是進(jìn)程線程就是處于無法使用狀態(tài)?
有沒有其他的辦法處理這種需求?
public function onMessage($connection, $data)
{
$redis = new Redis();
$time_interval = 2;
//設(shè)置輪詢定時器
$timer_id = Timer::add($time_interval, function() use ($redis,$connection,&$timer_id){
echo "------------ \n";
echo "定時器執(zhí)行 {$connection->id} \n";
$key = 'Sea_1';
if($value = $redis->lpop($key)){
$connection->send($value);
Timer::del($timer_id);
echo "刪除定時器 \n";
}else{
echo "未找到數(shù)據(jù)";
}
});
//一次性定時器, 刪除輪詢定時器
Timer::add(60,function ($timer_id,$connection){
Timer::del($timer_id);
$connection->send("沒有數(shù)據(jù)");
},,false);
return true;
$connection->send('haha');
}