1.长轮询查询结果,稍微优化了一下sleep的时间,可以参考一下
2.还有下面那几个函数是为了防止报错设置的,上面有对应的意思可以看看,set_time_limit 一定不能少,其他可以去掉如果不报错的话
public function Search(XhyRequest $request){
$array = $request->param('request_id');
// 设置请求数据和时间
$time= 12;
if (!$array) {
return $this->fail('没有request_id','',Code::NO_REQUEST_ID);
}else{
set_time_limit(0);//无限请求超时时间
ini_set('memory_limit', '-1'); //内存无限
ini_set("max_execution_time", "500");//代码执行时间
ignore_user_abort(true);//用户断开会继续执行,默认false
$i=0;
while (true){
if ($i<3) {
sleep(3); //延迟三秒
$i=$i+3;
}elseif($i<7){
sleep(2); //延迟二秒
$i=$i+2;
}else{
sleep(1); //延迟一秒
$i++;
}
//若得到数据则马上返回数据给客服端,并结束本次请求
$arrays = Db::name('t_homework_record')
->where('homework_record_id',$array)
->find();
if($arrays){
//打印的结果赋值输出
return $this->success($data,'success');
}
//到指定超时时间还未返回数据则断开连接
if($i == $time){
return $this->fail('请求超时','',Code::TIMEOUT);
}
}
}
}