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类
Nov 27 PHP
php在字符串中查找另一个字符串
Nov 19 PHP
php 结果集的分页实现代码
Mar 10 PHP
php MYSQL 数据备份类
Jun 19 PHP
PHP中数组定义的几种方法
Sep 01 PHP
ThinkPHP3.1新特性之G方法的使用
Jun 19 PHP
php+curl 发送图片处理代码分享
Jul 09 PHP
php使用glob函数遍历文件和目录详解
Sep 23 PHP
关于php几种字符串连接的效率比较(详解)
Feb 22 PHP
PHP CURL与java http使用方法详解
Jan 26 PHP
PHP有序表查找之插值查找算法示例
Feb 10 PHP
Laravel登录失败次数限制的实现方法
Aug 26 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将向Java靠拢
2006/10/09 PHP
详细介绍PHP应用提速面面观
2006/10/09 PHP
PHP 7.0.2 正式版发布
2016/01/08 PHP
Laravel框架源码解析之模型Model原理与用法解析
2020/05/14 PHP
jQuery 全选效果实现代码
2009/03/23 Javascript
javascript搜索框点击文字消失失焦时文本出现
2014/09/18 Javascript
js字符串操作方法实例分析
2015/05/06 Javascript
JavaScript文本框脚本编写的注意事项
2016/01/25 Javascript
总结javascript中的六种迭代器
2016/08/16 Javascript
jQuery中值得注意的trigger方法浅析
2016/12/12 Javascript
你可能不知道的JSON.stringify()详解
2017/08/17 Javascript
seajs模块压缩问题与解决方法实例分析
2017/10/10 Javascript
JS返回顶部实例代码
2020/08/09 Javascript
JavaScript实现为事件句柄绑定监听函数的方法分析
2017/11/14 Javascript
JS集合set类的实现与使用方法示例
2019/02/01 Javascript
node省市区三级数据性能测评实例分析
2019/11/06 Javascript
vue 解决addRoutes多次添加路由重复的操作
2020/08/04 Javascript
在vue中使用jsonp进行跨域请求接口操作
2020/10/29 Javascript
Python urlopen 使用小示例
2008/09/06 Python
python执行get提交的方法
2015/04/29 Python
总结Python编程中三条常用的技巧
2015/05/11 Python
浅谈Tensorflow由于版本问题出现的几种错误及解决方法
2018/06/13 Python
Python地图绘制实操详解
2019/03/04 Python
Python中的asyncio代码详解
2019/06/10 Python
windows上安装python3教程以及环境变量配置详解
2019/07/18 Python
基于Python安装pyecharts所遇的问题及解决方法
2019/08/12 Python
利用python绘制正态分布曲线
2021/01/04 Python
美国摄影爱好者购物网站:Focus Camera
2016/10/21 全球购物
美国领先的在线邮轮旅游公司:CruiseDirect
2018/06/07 全球购物
伯克斯奥特莱斯:Burkes Outlet
2019/03/30 全球购物
应届生程序员求职信
2013/11/05 职场文书
小学教师个人先进事迹材料
2014/05/17 职场文书
天那边观后感
2015/06/09 职场文书
退休欢送会主持词
2015/07/01 职场文书
利用Nginx代理如何解决前端跨域问题详析
2021/04/02 Servers
SpringBoot SpringEL表达式的使用
2021/07/25 Java/Android