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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。