Thinkphp结合AJAX长轮询实现PC与APP推送详解
前言
本文主要给大家介绍的关于Thinkphp结合AJAX长轮询实现PC与APP推送的相关内容,分享出来供大家参考学习,话不多说,来一起看看详细的介绍。
实现逻辑
某个操作(比如新建一条公告)后,触发同时推送消息给APP或是移动WEB的所有用户或指定用户。
不论性能,总还是有人会用到吧,实现如下(基于Thinkphp5消息推送):
PHP长轮询
/* *long轮询API查询接口 */ publicfunctionid_log() { if(request()->isPost()){ $id=$this->param['id']; set_time_limit(0); $id_log=Db::name('table')->alias('c') ->join('tablecc','c.youname=cc.youname','left') ->join('tablea','cc.youname=a.youname','left') ->join('tableu','c.youname=u.youname','left') ->field('') ->where('',$id) ->order('log_timedesc') ->limit(1) ->select(); while(true){ if($id_log){ $id_log_set=Db::name('table2') ->where('',$id) ->limit(1) ->setField('log_flag','1'); $this->response($id_log); } $this->wrong(404100); usleep(2000); } }; }
换上你自己的表和相关的关联字段。
推送消息创建方法
/** *创建消息日志触发操作方法 *@paramstring$log_content日志内容 *@paramstring$log_type日志类型 *@paramint$log_c_idA用户ID *@paramstring$log_userB用户ID *@paramstring$log_adminPC *@paramstring$log_status *@returnarray */ functioncreateLog($log_c_id,$log_type,$log_content,$log_admin,$log_user,$log_status) { $data=[ 'log_c_id'=>$log_c_id, 'log_ip'=>get_client_ip(), 'log_admin'=>$log_admin, 'log_time'=>date("Y-m-dH:i:s",time()), 'log_url'=>get_url(), 'log_type'=>$log_type, 'log_content'=>$log_content, 'log_user'=>$log_user, 'log_status'=>$log_status ]; $logadd=\think\Db::name('table')->insertGetId($data); return$logadd; }
采用数据库存消息并检测和设计flag的形式推,不然离线消息就没法推了,同样的要修改成你自己的数据结构!
AJAX长轮询
vargetting={ url:'{:url("youapi/url")}', dataType:'json', success:function(res){ $(".count").text($('.llt').children().size()); $(".llt").remove(); if(res.length!=null){ $.each(res,function(index,item){ $(".notification").append(''+item.u_name+':'+item.log_content+' '+item.log_time+''); }); }else{ } } }; //关键在这里,Ajax定时访问服务端,不断获取数据,这里是1秒请求一次。 window.setInterval(function(){ $.ajax(getting) },1000);
总结
好了,大概就这样,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对毛票票的支持
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。