龙行博客

走路看风景,经历看人生,岁月留痕迹,人生留轨迹,17的历史,18的豪情,时间的匆忙,人生的风景,放开心胸往前走,成功再远行,放开理想往前走,梦想再行动。
现在位置:首页 > 编程语言 > PHP > thinkphp5实现长轮询api接口

thinkphp5实现长轮询api接口

龙行    PHP    2019-2-19    4558    0评论    

项目需求,后端需要用到长轮询,设计思路就是默认请求数据,当有新的请求就执行新的数据,比如信息播报,

/**
     *  轮询获取数据
     * @param int $id
     * @return \think\response\Json
     */
    public function lucky_news($id = 0)
    {
        if ($id == 0) {
            $res = db('lottery_log')->field('id,type,user_id,num,prize_name')->order('id desc')->limit(20)->select();
            foreach ($res as &$v) {
                $v['nickname'] = db('user')->where('id', $v['user_id'])->value('nickname');
                unset($v['user_id']);
            }
            return json(['code' => 1, 'data' => $res]);
        }

        return  longPolling(function () use ($id) {   
            $data = db('lottery_log')->field('id,num,prize_name,user_id,type')->where('id', '>', $id)->select();
            foreach ($data as &$v) {
                $v['nickname'] = db('user')->where('id', $v['user_id'])->value('nickname');
                unset($v['user_id']);
            }
            return json(['code' => 1, 'data' => $data ?? (object)[]]);
        });
    }
回调方法核心

function longPolling($callback)
{
    session_write_close();  //前面的session数据存入或读取,然后关闭session.  防止session阻塞
    ignore_user_abort(false);  //停止脚本运行
    set_time_limit(30);   //设置脚本允许的时间 0:没有时间限制

    for ($i = 0; $i < 25; $i++) {
        // echo str_repeat(" ", 4000);   //把''重复4000次
        $return_data = $callback();
        if ($return_data) {
            return $return_data;
        }
        sleep(1);
        ob_flush();   //输出缓冲区的内容   //    必须和下面同时使用 flush()
        flush();  //刷新缓冲区的内容  该函数将当前为止程序的所有输出发送到用户的浏览器,必须同时使用 ob_flush() 和flush() 函数来刷新输出缓冲
    }
    ob_end_flush();  //输出缓冲区内容并关闭缓冲
    return json(['code' => 1, 'data' => (object)array()]);
}

评论一下 分享本文 赞助站长

赞助站长X

扫码赞助站长
联系站长
龙行博客
  • 版权申明:此文如未标注转载均为本站原创,自由转载请表明出处《龙行博客》。
  • 本文网址:https://www.liaotaoo.cn/168.html
  • 上篇文章:VUE学习之页面渲染数据
  • 下篇文章:thinkphp5.1配置__PUBLIC__配置
  • php tp5 php7
快捷导航
联系博主
在线壁纸
给我留言
四四五五
音乐欣赏
返回顶部