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 相关文章推荐
不用数据库的多用户文件自由上传投票系统(3)
Oct 09 PHP
php SQL防注入代码集合
Apr 25 PHP
PHP-MySQL教程归纳总结
Jun 07 PHP
php intval的测试代码发现问题
Jul 27 PHP
Zend 输出产生XML解析错误
Mar 03 PHP
php实现网站插件机制的方法
Nov 10 PHP
php基本函数汇总
Jul 09 PHP
PHP中Array相关函数简介
Jul 03 PHP
thinkPHP商城公告功能开发问题分析
Dec 01 PHP
php实现微信扫码支付
Mar 26 PHP
浅谈Yii乐观锁的使用及原理
Jul 25 PHP
Laravel 5.5 的自定义验证对象/类示例代码详解
Aug 29 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生成随机密码类分享
2014/06/25 PHP
PHP中变量引用与变量销毁机制分析
2014/11/15 PHP
php判断两个日期之间相差多少个月份的方法
2015/06/18 PHP
PHP中大括号'{}'用法实例总结
2017/02/08 PHP
thinkPHP框架中执行原生SQL语句的方法
2017/10/25 PHP
PHP文件上传小程序 适合初学者学习!
2019/05/23 PHP
PHP生成随机密码4种方法及性能对比
2020/12/11 PHP
JavaScript call apply使用 JavaScript对象的方法绑定到DOM事件后this指向问题
2011/09/28 Javascript
js使用for循环查询数组中是否存在某个值
2014/08/12 Javascript
浅谈javascript中onbeforeunload与onunload事件
2015/12/10 Javascript
实例讲解javascript注册事件处理函数
2016/01/09 Javascript
JavaScript实现阿拉伯数字和中文数字互相转换
2016/06/12 Javascript
webpack打包单页面如何引用的js
2017/06/07 Javascript
详解vue2.0的Element UI的表格table列时间戳格式化
2017/06/13 Javascript
微信小程序实现animation动画
2018/01/26 Javascript
vue input 输入校验字母数字组合且长度小于30的实现代码
2018/05/16 Javascript
js+SVG实现动态时钟效果
2018/07/14 Javascript
Vue实现根据hash高亮选项卡
2019/05/27 Javascript
python中getattr函数使用方法 getattr实现工厂模式
2014/01/20 Python
使用Python对Csv文件操作实例代码
2017/05/12 Python
python中正则表达式的使用方法
2018/02/25 Python
Django 开发环境与生产环境的区分详解
2019/07/26 Python
使用TensorFlow对图像进行随机旋转的实现示例
2020/01/20 Python
CSS3的颜色渐变效果的示例代码
2017/09/29 HTML / CSS
Avène雅漾美国官方网站:敏感肌肤护理专家
2016/10/24 全球购物
美国知名奢侈美容品牌零售商:Cos Bar
2017/04/21 全球购物
PAUL HEWITT手表美国站:德国北部时尚生活配饰品牌,船锚元素
2017/11/18 全球购物
个人求职信范例
2014/01/29 职场文书
《山谷中的谜底》教学反思
2014/04/26 职场文书
大学教师师德师风演讲稿
2014/08/22 职场文书
承诺函格式模板
2015/01/21 职场文书
放弃继承权公证书
2015/01/23 职场文书
2016医师资格考试考生诚信考试承诺书
2016/03/25 职场文书
干货!开幕词的写作方法
2019/04/02 职场文书
Python3.8官网文档之类的基础语法阅读
2021/09/04 Python
UNION CREATIVE《Re:从零开始的异世界生活》雷姆手办
2022/03/20 日漫