php ajax模拟推送,Thinkphp结合AJAX长轮询实现PC与APP推送详解

前言

本文主要给大家介绍的关于Thinkphp结合AJAX长轮询实现PC与APP推送的相关内容,分享出来供大家参考学习,话不多说,来一起看看详细的介绍。

实现逻辑

某个操作(比如新建一条公告)后,触发同时推送消息给APP或是移动WEB的所有用户或指定用户。

不论性能,总还是有人会用到吧,实现如下(基于Thinkphp5消息推送):

PHP长轮询

/*

* long轮询 API查询接口

*/

public function id_log()

{

if (request()->isPost()) {

$id = $this->param['id'];

set_time_limit(0);

$id_log = Db::name('table')->alias('c')

->join('table cc', 'c.youname=cc.youname', 'left')

->join('table a', 'cc.youname =a.youname ', 'left')

->join('table u', 'c.youname =u.youname ', 'left')

->field('')

->where('', $id)

->order('log_time desc')

->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);

}

};

}

换上你自己的表和相关的关联字段。

推送消息创建方法

/**

* 创建消息日志 触发操作方法

* @param string $log_content 日志内容

* @param string $log_type 日志类型

* @param int $log_c_id A用户ID

* @param string $log_user B用户ID

* @param string $log_admin PC

* @param string $log_status

* @return array

*/

function createLog($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-d H: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长轮询

var getting = {

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);

总结

好了,大概就这样,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值