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&amp;&amp;mysql)六
Oct 09 PHP
DISCUZ 论坛管理员密码忘记的解决方法
May 14 PHP
php下关于中英数字混排的字符串分割问题
Apr 06 PHP
php allow_url_include的应用和解释
Apr 22 PHP
浅析memcache启动以及telnet命令详解
Jun 28 PHP
php根据身份证号码计算年龄的实例代码
Jan 18 PHP
PHP $_FILES中error返回值详解
Jan 30 PHP
phpmailer在服务器上不能正常发送邮件的解决办法
Jul 08 PHP
PHP cURL初始化和执行方法入门级代码
May 28 PHP
js代码实现微博导航栏
Jul 30 PHP
CI操作cookie的方法分析(基于helper类库)
Mar 28 PHP
Laravel 集成微信用户登录和绑定的实现
Dec 27 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
Syphon 虹吸式咖啡壶冲煮–拨动法
2021/03/03 冲泡冲煮
PHP 开发环境配置(Zend Server安装)
2010/04/28 PHP
浅析使用Turck-mmcache编译来加速、优化PHP代码
2013/06/20 PHP
php脚本守护进程原理与实现方法详解
2017/07/20 PHP
5款Javascript颜色选择器
2009/10/25 Javascript
基于jquery的Repeater实现代码
2010/07/17 Javascript
用Javascript实现Windows任务管理器的代码
2012/03/27 Javascript
jQuery动态添加 input type=file的实现代码
2012/06/14 Javascript
JQuery为textarea添加maxlength属性并且兼容IE
2013/04/25 Javascript
通过JS来判断页面控件是否获取焦点
2014/01/03 Javascript
javascript学习笔记之10个原生技巧
2014/05/21 Javascript
JavaScript将当前时间转换成UTC标准时间的方法
2015/04/06 Javascript
终于实现了!精彩的jquery弹幕效果
2016/07/18 Javascript
js防阻塞加载的实现方法
2016/09/09 Javascript
seajs学习教程之基础篇
2016/10/20 Javascript
ajax +NodeJS 实现图片上传实例
2017/06/06 NodeJs
js求数组中全部数字可拼接出的最大整数示例代码
2017/08/25 Javascript
JavaScript中如何判断一个值的类型
2017/09/15 Javascript
关于Angularjs中自定义指令一些有价值的细节和技巧小结
2018/04/22 Javascript
bootstrap 弹出框modal添加垂直方向滚轴效果
2018/07/09 Javascript
element-ui使用导航栏跳转路由的用法详解
2018/08/22 Javascript
微信内置浏览器图片查看器的代码实例
2019/10/08 Javascript
ES6 Iterator遍历器原理,应用场景及相关常用知识拓展详解
2020/02/15 Javascript
微信小程序 button样式设置为图片的方法
2020/06/19 Javascript
利用 Chrome Dev Tools 进行页面性能分析的步骤说明(前端性能优化)
2021/02/24 Javascript
[01:00:52]2018DOTA2亚洲邀请赛 4.4 淘汰赛 EG vs LGD 第一场
2018/04/05 DOTA
Python使用Shelve保存对象方法总结
2019/01/28 Python
python已协程方式处理任务实现过程
2019/12/27 Python
如何解决pycharm调试报错的问题
2020/08/06 Python
pycharm 2020 1.1的安装流程
2020/09/29 Python
Python读写Excel表格的方法
2021/03/02 Python
Oracle里面常用的数据字典有哪些
2014/02/14 面试题
第二批党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
大学运动会加油稿
2015/07/22 职场文书
导游词之大雁塔景区
2019/09/17 职场文书
python基础之类属性和实例属性
2021/10/24 Python