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个人网站架设连环讲(二)
Oct 09 PHP
PHP导入Excel到MySQL的方法
Apr 23 PHP
解析thinkphp基本配置 convention.php
Jun 18 PHP
php学习笔记之基础知识
Nov 08 PHP
PHP中应该避免使用同名变量(拆分临时变量)
Apr 03 PHP
Yii快速入门经典教程
Dec 28 PHP
PHP基本语法实例总结
Sep 09 PHP
Thinkphp连表查询及数据导出方法示例
Oct 15 PHP
PHP swoole和redis异步任务实现方法分析
Aug 12 PHP
PHP实现cookie跨域session共享的方法分析
Aug 23 PHP
tp5框架基于ajax实现异步删除图片的方法示例
Feb 10 PHP
php设计模式之状态模式实例分析【星际争霸游戏案例】
Mar 26 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
mysql_num_rows VS COUNT 效率问题分析
2011/04/23 PHP
php四种基础算法代码实例
2013/10/29 PHP
PHP简单的MVC框架实现方法
2015/12/01 PHP
Laravel开启跨域请求的方法
2019/10/13 PHP
js怎么终止程序return不行换jfslk
2013/05/30 Javascript
js 控制页面跳转的5种方法
2013/09/09 Javascript
display和visibility的区别示例介绍
2014/02/26 Javascript
jq实现酷炫的鼠标经过图片翻滚效果
2014/03/12 Javascript
jquery实现类似EasyUI的页面布局可改变左右的宽度
2020/09/12 Javascript
jquery自定义插件——window的实现【示例代码】
2016/05/06 Javascript
详解Angular的内置过滤器和自定义过滤器【推荐】
2016/12/26 Javascript
Angular.js中下拉框实现渲染html的方法
2017/06/18 Javascript
layui radio性别单选框赋值方法
2018/08/15 Javascript
一文了解Vue中的nextTick
2019/05/06 Javascript
Vue 动态添加路由及生成菜单的方法示例
2019/06/20 Javascript
[01:41]DOTA2 2015国际邀请赛中国区预选赛第三日战报
2015/05/28 DOTA
跟老齐学Python之编写类之四再论继承
2014/10/11 Python
详解Python程序与服务器连接的WSGI接口
2015/04/29 Python
在windows下快速搭建web.py开发框架方法
2016/04/22 Python
Python OpenCV处理图像之滤镜和图像运算
2018/07/10 Python
Python面向对象程序设计类变量与成员变量、类方法与成员方法用法分析
2019/04/12 Python
python实现超市商品销售管理系统
2019/11/22 Python
Python内置数据类型list各方法的性能测试过程解析
2020/01/07 Python
在django admin详情表单显示中添加自定义控件的实现
2020/03/11 Python
python3的pip路径在哪
2020/06/23 Python
分享PyCharm最新激活码(真永久激活方法)不用每月找安装参数或最新激活码了
2020/12/27 Python
python抢购软件/插件/脚本附完整源码
2021/03/04 Python
canvas学习和滤镜实现代码
2018/08/22 HTML / CSS
日语专业推荐信
2013/11/12 职场文书
毕业设计说明书
2014/05/07 职场文书
电子信息工程专业求职信
2014/06/28 职场文书
小学毕业典礼演讲稿
2014/09/09 职场文书
民政局副局长民主生活会个人整改措施
2014/10/04 职场文书
毕业生评语大全
2015/01/04 职场文书
2015年学校消防安全工作总结
2015/10/14 职场文书
Win11 PC上的Outlook搜索错误怎么办?
2022/07/15 数码科技