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 simplexmlElement操作xml的命名空间实现代码
Jan 04 PHP
PHPWind与Discuz截取字符函数substrs与cutstr性能比较
Dec 05 PHP
php实现memcache缓存示例讲解
Dec 04 PHP
PHP解析目录路径的3个函数总结
Nov 18 PHP
yii中widget的用法
Dec 03 PHP
php实现简单文件下载的方法
Jan 30 PHP
PHP实现将视频转成MP4并获取视频预览图的方法
Mar 12 PHP
PHP 在数组中搜索给定的简单实例 array_search 函数
Jun 13 PHP
PHP给源代码加密的几种方法汇总(推荐)
Feb 06 PHP
Laravel向公共模板赋值方法总结
Jun 25 PHP
Thinkphp5.0 框架的请求方式与响应方式分析
Oct 14 PHP
PHP网页缓存技术优点及代码实例
Jul 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中cookies使用指南
2007/03/16 PHP
也谈php网站在线人数统计
2008/04/09 PHP
php对gzip文件或者字符串解压实例参考
2008/07/25 PHP
php 空格,换行,跳格使用说明
2009/12/18 PHP
php计算程序运行时间的简单例子分享
2014/05/10 PHP
PHP实现登陆表单提交CSRF及验证码
2017/01/24 PHP
PHP获取数组中单列值的方法
2017/06/10 PHP
JQuery与Ajax常用代码实现对比
2009/10/03 Javascript
javasctipt如何显示几分钟前、几天前等
2014/04/30 Javascript
javaScript使用EL表达式的几种方式
2014/05/27 Javascript
js识别不同浏览器基于userAgent做判断
2014/07/29 Javascript
基于jQuery实现文本框缩放以及上下移动功能
2014/11/24 Javascript
jQuery的one()方法用法实例
2015/01/19 Javascript
JavaScript中匿名函数用法实例
2015/03/23 Javascript
网站发布后Bootstrap框架引用woff字体无法正常显示的解决方法
2016/11/24 Javascript
详解webpack自动生成html页面
2017/06/29 Javascript
vue使用axios时关于this的指向问题详解
2017/12/22 Javascript
JS关于刷新页面的相关总结
2018/05/09 Javascript
微信小程序用户信息encryptedData详解
2018/08/24 Javascript
详解小程序用户登录状态检查与更新实例
2019/05/15 Javascript
微信小程序webSocket的使用方法
2020/02/20 Javascript
es6函数之尾调用优化实例分析
2020/04/25 Javascript
[04:26]2014DOTA2国际邀请赛-Newbee顺利进入胜者组决赛 独家专访战神7
2014/07/19 DOTA
修改Python的pyxmpp2中的主循环使其提高性能
2015/04/24 Python
Python import用法以及与from...import的区别
2015/05/28 Python
Python中super()函数简介及用法分享
2016/07/11 Python
通过python将大量文件按修改时间分类的方法
2018/10/17 Python
Python txt文件加入字典并查询的方法
2019/01/15 Python
python scrapy重复执行实现代码详解
2019/12/28 Python
django-xadmin根据当前登录用户动态设置表单字段默认值方式
2020/03/13 Python
春节晚会主持词
2014/03/24 职场文书
房屋买卖协议书范本
2014/04/10 职场文书
英语分层教学实施方案
2014/06/15 职场文书
公司的门卫岗位职责
2014/09/09 职场文书
护理见习报告范文
2014/11/03 职场文书
计算机专业自荐信范文
2015/03/26 职场文书