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 输出简单动态WAP页面
Jun 09 PHP
PHP获取url的函数代码
Aug 02 PHP
Apache服务器无法使用的解决方法
May 08 PHP
探讨捕获php错误信息方法的详解
Jun 09 PHP
php中mysql操作buffer用法详解
Mar 19 PHP
PHP 7.0.2 正式版发布
Jan 08 PHP
ThinkPHP的常用配置选项汇总
Mar 24 PHP
PHP中抽象类和抽象方法概念与用法分析
May 24 PHP
PHP获取指定日期是星期几的实现方法
Nov 30 PHP
详解PHP中mb_strpos的使用
Feb 04 PHP
TP5(thinkPHP5框架)基于bootstrap实现的单图上传插件用法示例
May 29 PHP
laravel框架路由分组,中间件,命名空间,子域名,路由前缀实例分析
Feb 18 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
PHP及Zend Engine的线程安全模型分析
2011/11/10 PHP
php中用date函数获取当前时间有误的解决办法
2013/08/02 PHP
php生成静态html页面的方法(2种方法)
2015/09/14 PHP
PHP实现基于回溯法求解迷宫问题的方法详解
2017/08/17 PHP
iframe 异步加载技术及性能分析
2011/07/19 Javascript
javascript监听鼠标滚轮事件浅析
2014/06/05 Javascript
jQuery结合AJAX之在页面滚动时从服务器加载数据
2015/06/30 Javascript
详解Bootstrap按钮
2016/01/04 Javascript
省市联动效果的简单实现代码(推荐)
2016/06/06 Javascript
angular基于路由控制ui-router实现系统权限控制
2016/09/27 Javascript
简单的jQuery拖拽排序效果的实现(增强动态)
2017/02/09 Javascript
Angularjs中使用指令绑定点击事件的方法
2017/03/30 Javascript
微信小程序实现时间进度条功能
2020/11/17 Javascript
JS apply用法总结和使用场景实例分析
2020/03/14 Javascript
JS使用正则表达式实现常用的表单验证功能分析
2020/04/30 Javascript
VUE UPLOAD 通过ACTION返回上传结果操作
2020/09/07 Javascript
Python3指定路径寻找符合匹配模式文件
2015/05/22 Python
Python中property属性实例解析
2018/02/10 Python
NumPy 数学函数及代数运算的实现代码
2018/07/18 Python
如何利用Anaconda配置简单的Python环境
2019/06/24 Python
python爬虫的一个常见简单js反爬详解
2019/07/09 Python
使用django和vue进行数据交互的方法步骤
2019/11/11 Python
django admin管理工具自定义时间区间筛选器DateRangeFilter介绍
2020/05/19 Python
详解python对象之间的交互
2020/09/29 Python
领先的荷兰线上超市:荷兰之家Holland at Home(支持中文)
2021/01/21 全球购物
排序都有哪几种方法?请列举。用JAVA实现一个快速排序
2014/02/16 面试题
自荐信要包含哪些内容
2013/11/06 职场文书
销售文员岗位职责
2013/11/29 职场文书
不假外出检讨书
2014/01/27 职场文书
党员2014两会学习心得体会
2014/03/17 职场文书
党的群众路线教育实践活动个人整改措施落实情况
2014/11/04 职场文书
2015年领班工作总结
2015/04/29 职场文书
公诉意见书范文
2015/06/05 职场文书
关于童年的读书笔记
2015/06/26 职场文书
Java中常用解析工具jackson及fastjson的使用
2021/06/28 Java/Android
nginx.conf配置文件结构小结
2022/04/08 Servers