Thinkphp结合AJAX长轮询实现PC与APP推送详解


Posted in PHP onJuly 31, 2017

前言

本文主要给大家介绍的关于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('<li class="llt" data-ccid="' + item.id + '"><a href="{:url(" rel="external nofollow" admin/carloan/edit")}?id='+item.log_c_id+'"><span class="label label-info"><i class="icon-bullhorn"></i></span><span class="message">' + item.u_name + ':' + item.log_content + '</span><span class="time"><span class="liveTime">' + item.log_time + '</span></span></a></li>');
    });
   }else{
 
   }
 
  }
 };
 //关键在这里,Ajax定时访问服务端,不断获取数据 ,这里是1秒请求一次。
 window.setInterval(function () {
  $.ajax(getting)
 }, 1000);

总结

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

PHP 相关文章推荐
PHP下10件你也许并不了解的事情
Sep 11 PHP
php删除页面记录 同时刷新页面 删除条件用GET方式获得
Jan 10 PHP
巧用php中的array_filter()函数去掉多维空值的代码分享
Sep 07 PHP
PHP中设置时区,记录日志文件的实现代码
Jan 07 PHP
php使用smtp发送支持附件的邮件示例
Apr 13 PHP
php判断数组元素中是否存在某个字符串的方法
Jun 14 PHP
PHP开启opcache提升代码性能
Apr 26 PHP
php编写批量生成不重复的卡号密码代码
May 14 PHP
php  单例模式详细介绍及实现源码
Nov 05 PHP
PHP ADODB生成下拉列表框功能示例
May 29 PHP
PHP 计算两个时间段之间交集的天数示例
Oct 24 PHP
phpcmsv9.0任意文件上传漏洞解析
Oct 20 PHP
php实现将二维关联数组转换成字符串的方法详解
Jul 31 #PHP
微信接口生成带参数的二维码
Jul 31 #PHP
PHP判断一个数组是另一个数组子集的方法详解
Jul 31 #PHP
PHP中TP5 上传文件的实例详解
Jul 31 #PHP
PHP 中TP5 Request 请求对象的实例详解
Jul 31 #PHP
PHP将数据导出Excel表中的实例(投机型)
Jul 31 #PHP
浅谈thinkphp5 instance 的简单实现
Jul 30 #PHP
You might like
使用HMAC-SHA1签名方法详解
2013/06/26 PHP
php实现mysql备份恢复分卷处理的方法
2014/12/26 PHP
Laravel框架搜索分页功能示例
2019/02/01 PHP
stripos函数知识点实例分享
2019/02/11 PHP
js获取单选按钮的数据
2006/11/27 Javascript
url地址自动加#号问题说明
2010/08/21 Javascript
juqery 学习之三 选择器 子元素与表单
2010/11/25 Javascript
node.js中的favicon.ico请求问题处理
2014/12/15 Javascript
jquery判断单选按钮radio是否选中的方法
2015/05/05 Javascript
JavaScript绑定事件监听函数的通用方法
2016/05/14 Javascript
javaScript+turn.js实现图书翻页效果实例代码
2017/02/16 Javascript
jQuery选择器之表单元素选择器详解
2017/09/19 jQuery
使用JS实现导航切换时高亮显示的示例讲解
2018/08/22 Javascript
JavaScript实现动态添加、移除元素或属性的方法分析
2019/01/03 Javascript
原生JS使用Canvas实现拖拽式绘图功能
2019/06/05 Javascript
微信小程序开发摇一摇功能
2019/11/22 Javascript
javascript设计模式 ? 工厂模式原理与应用实例分析
2020/04/09 Javascript
python以环状形式组合排列图片并输出的方法
2015/03/17 Python
python编写爬虫小程序
2015/05/14 Python
python实现中文分词FMM算法实例
2015/07/10 Python
python学习之编写查询ip程序
2016/02/27 Python
Python selenium文件上传方法汇总
2020/11/19 Python
利用python发送和接收邮件
2016/09/27 Python
对python 匹配字符串开头和结尾的方法详解
2018/10/27 Python
python查找重复图片并删除(图片去重)
2019/07/16 Python
用python生成与调用cntk模型代码演示方法
2019/08/26 Python
Python坐标线性插值应用实现
2019/11/13 Python
详解python使用金山词霸的翻译功能(调试工具断点的使用)
2021/01/07 Python
C/C++程序员常见面试题一
2012/12/08 面试题
工商管理实习自我鉴定
2013/09/28 职场文书
致长跑运动员加油稿
2014/02/20 职场文书
新年联欢会主持词
2014/03/27 职场文书
实验室的标语
2014/06/20 职场文书
导游词之南京中山陵
2019/11/27 职场文书
《悬崖边的树》读后感2篇
2019/12/02 职场文书
python开发实时可视化仪表盘的示例
2021/05/07 Python