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 图片上添加透明度渐变的效果
Jun 29 PHP
php模板中出现空行解决方法
Mar 08 PHP
php中jpgraph类库的使用介绍
Aug 08 PHP
PHP的Yii框架使用中的一些错误解决方法与建议
Aug 21 PHP
PHP使用内置函数生成图片的方法详解
May 09 PHP
php获取远程图片并下载保存到本地的方法分析
Oct 08 PHP
php中让人头疼的浮点数运算分析
Oct 10 PHP
详解PHP数据压缩、加解密(pack, unpack)
Dec 17 PHP
老生常谈PHP面向对象之标识映射
Jun 21 PHP
PHP微信公众号开发之微信红包实现方法分析
Jul 14 PHP
PHP超低内存遍历目录文件和读取超大文件的方法
May 01 PHP
Laravel手动返回错误码示例
Oct 22 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
15种PHP Encoder的比较
2007/04/17 PHP
解析phpstorm + xdebug 远程断点调试
2013/06/20 PHP
WIFI万能钥匙密码查询接口实例
2015/09/28 PHP
Zend Framework教程之Resource Autoloading用法实例
2016/03/08 PHP
PHP封装的page分页类定义与用法完整示例
2018/12/24 PHP
javascript 隐藏/显示指定的区域附HTML元素【legend】用法
2010/03/05 Javascript
js 居中漂浮广告
2010/03/21 Javascript
单独使用CKFinder选择图片的方法
2010/08/21 Javascript
jquery动画2.元素坐标动画效果(创建一个图片走廊)
2012/08/24 Javascript
js的隐含参数(arguments,callee,caller)使用方法
2014/01/28 Javascript
jquery中get,post和ajax方法的使用小结
2014/02/04 Javascript
基于AngularJs + Bootstrap + AngularStrap相结合实现省市区联动代码
2016/05/30 Javascript
jQuery解析与处理服务器端返回xml格式数据的方法详解
2016/07/04 Javascript
浅谈Vue-cli 命令行工具分析
2017/11/22 Javascript
解决vue项目,npm run build后,报路径错的问题
2020/08/13 Javascript
[01:30:54]《加油DOTA》 第三期
2014/08/18 DOTA
python实现简单点对点(p2p)聊天
2017/09/13 Python
python单例模式原理与创建方法实例分析
2019/10/26 Python
Python socket模块ftp传输文件过程解析
2019/11/05 Python
Python合并2个字典成1个新字典的方法(9种)
2019/12/19 Python
selenium中get_cookies()和add_cookie()的用法详解
2020/01/06 Python
python获取响应某个字段值的3种实现方法
2020/04/30 Python
用python写PDF转换器的实现
2020/10/29 Python
python爬虫 requests-html的使用
2020/11/30 Python
Python爬取某平台短视频的方法
2021/02/08 Python
HTML5 Canvas之测试浏览器是否支持Canvas的方法
2015/01/01 HTML / CSS
东芝官网商城:还原日式美学,打造美好生活
2018/12/27 全球购物
捐书寄语赠言
2014/01/18 职场文书
《石榴》教学反思
2014/03/02 职场文书
应聘英语教师求职信
2014/04/24 职场文书
教师个人事迹材料
2014/12/17 职场文书
员工家属慰问信
2015/03/24 职场文书
2015年助理工程师工作总结
2015/04/03 职场文书
商务司机岗位职责
2015/04/10 职场文书
委托书范本格式
2019/04/18 职场文书
2019年度政务公开考核工作总结模板
2019/11/11 职场文书