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连接mysql数据库代码
Mar 10 PHP
PHP中的strtr函数使用介绍(str_replace)
Oct 20 PHP
PHP 5.3新增魔术方法__invoke概述
Jul 23 PHP
PHP获取一个字符串中间一部分字符的方法
Aug 19 PHP
PHP实现的多彩标签效果代码分享
Aug 21 PHP
PHP汉字转换拼音的函数代码
Dec 30 PHP
php使用文本统计访问量的方法
May 12 PHP
php添加数据到xml文件的简单例子
Sep 08 PHP
PHP实现链式操作的三种方法详解
Nov 16 PHP
Yaf框架封装的MySQL数据库操作示例
Mar 06 PHP
让whoops帮我们告别ThinkPHP6的异常页面
Mar 02 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程序员应该了解MongoDB的五件事
2013/06/03 PHP
Zend Framework教程之Zend_Db_Table表关联实例详解
2016/03/23 PHP
PHP实现创建微信自定义菜单的方法示例
2017/07/14 PHP
ThinkPHP5框架实现简单的批量查询功能示例
2018/06/07 PHP
thinkPHP5框架auth权限控制类与用法示例
2018/06/12 PHP
使用PHP开发留言板功能
2019/11/19 PHP
Jquery index()方法 获取相应元素索引值
2012/10/12 Javascript
jquery实现树形二级菜单实例代码
2013/11/20 Javascript
Ajax同步与异步传输的示例代码
2013/11/21 Javascript
基于jquery实现鼠标滚轮驱动的图片切换效果
2015/10/26 Javascript
node.js实现爬虫教程
2020/08/25 Javascript
js操作数据库实现注册和登陆的简单实例
2016/05/26 Javascript
微信小程序 欢迎界面开发的实例详解
2016/11/30 Javascript
JS实现密码框的显示密码和隐藏密码功能示例
2016/12/26 Javascript
使用JavaScriptCore实现OC和JS交互详解
2017/03/28 Javascript
vue计算属性时v-for处理数组时遇到的一个bug问题
2018/01/21 Javascript
通过封装scroll.js 获取滚动条的值
2018/07/13 Javascript
微信小程序实现基于三元运算验证手机号/姓名功能示例
2019/01/19 Javascript
Vue实现附件上传功能
2020/05/28 Javascript
python 性能提升的几种方法
2016/07/15 Python
Python MD5加密实例详解
2017/08/02 Python
tensorflow1.0学习之模型的保存与恢复(Saver)
2018/04/23 Python
python实现浪漫的烟花秀
2019/01/30 Python
python 实现dict转json并保存文件
2019/12/05 Python
python自动化测试三部曲之unittest框架的实现
2020/10/07 Python
html5中使用hotcss.js实现手机端自适配的方法
2020/04/23 HTML / CSS
JavaScript实现前端网页版倒计时
2021/03/24 Javascript
城管执法人员个人对照检查材料思想汇报
2014/09/29 职场文书
2015教师年度思想工作总结
2015/04/30 职场文书
2015年节能减排工作总结
2015/05/14 职场文书
2016秋季小学开学寄语
2015/12/03 职场文书
外出听课学习心得体会
2016/01/15 职场文书
2019暑假阅读倡议书
2019/06/24 职场文书
Python insert() / append() 用法 Leetcode实战演示
2021/03/31 Python
MySQL 表锁定 LOCK和UNLOCK TABLES的 SQL语法
2022/04/18 MySQL
HTML实现仿Windows桌面主题特效的实现
2022/06/28 HTML / CSS