具体看代码,费话不说

PHP服务端

$mem = new RTMEM();
if(!$mem->conn())
  exit('no mem server');
if(!$mem->getstate())
  exit('moonjksrv is not runing');
$alminfo = $mem->get('alm_info');
if(!$alminfo)
  exit('no alarm');
$almobj = json_decode($alminfo);
if(!$almobj)
  exit('no json data');
$lastmodif = isset($_GET['timestamp']) ? $_GET['timestamp'] : 0;
$currentmodif = $almobj->timestamp;
while ($currentmodif <= $lastmodif) // check if the data file has been modified
{
  usleep(1000000); // sleep 1 second to unload the CPU
  clearstatcache();
  $alminfo = $mem->get('alm_info');
  if(!$alminfo)
    exit('no alarm');
  $almobj = json_decode($alminfo);
  if(!$almobj)
    exit('no json data');
  $currentmodif = $almobj->timestamp;
} exit(json_encode($almobj));

以下是JS端

//comet ajax////
var Comet = function(options){
this.init(options);
};
Comet.prototype = {
constructor: Comet,
init:function(options){
this.options = {
url:"",
callback:function(){}
}
this.options = $.extend(this.options,options||{});
this.url = this.options.url;
this.callback = this.options.callback;
this.timestamp = 0;
this.noerror = true;
this.lock = true;
},
connect: function(){
this.lock = false;
this.ajaxLoop();
},
disconnect: function(){
this.lock = true;
},
ajaxLoop: function(){
if(this.url && !this.lock){
var _this = this;
$.ajax({
url:_this.url,
type:'get',
data:'timestamp=' + _this.timestamp,
dataType:'json',
cache:false,
success:function(json){
_this.timestamp = json['timestamp'];
_this.handleResponse(json);
_this.noerror = true;
},
complete:function(){
if (_this.noerror){
_this.ajaxLoop();
}else{
// if a connection problem occurs, try to reconnect each 1 seconds
setTimeout(function(){_this.ajaxLoop()}, 1000);
}
_this.noerror = false;
}
})
}
},
handleResponse: function(response){
this.callback(response);
},
doRequest: function(request){
if(this.url && !this.lock){
$.get(this.url, { 'msg': request } );
}
}
}
/////// var comet = new Comet({
url:'binsrv/rt_alm.php?type=getrtalm',
callback:function(json){ //接收到数据的处理
if(typeof(page)!="undefined" && typeof(page.processAlmData)=="function")
page.processAlmData(json);
}
});
comet.connect();

这样的话,服务器查询数据有更新才会返回AJAX请求,没有更新会直到超时(PHP默认30秒超时),这时COMET会重新连接

这样大大降低了频繁的AJAX请求,又没有降低实时性。

COMET技术具体实现 结合PHP和JQUERY的更多相关文章

  1. 基于 Asp.Net的 Comet 技术解析

    Comet技术原理 来自维基百科:Comet是一种用于web的技术,能使服务器能实时地将更新的信息传送到客户端,而无须客户端发出请求,目前有两种实现方式,长轮询和iframe流. 简单的说是一种基于现 ...

  2. Comet技术详解:基于HTTP长连接的Web端实时通信技术

    前言 一般来说,Web端即时通讯技术因受限于浏览器的设计限制,一直以来实现起来并不容易,主流的Web端即时通讯方案大致有4种:传统Ajax短轮询.Comet技术.WebSocket技术.SSE(Ser ...

  3. 初识Comet技术

    一.服务器推送技术概述 服务器推送技术(Servers Push)的基础思想是将浏览器主动查询信息改为服务器主动发送信息.服务器发送一批数据,浏览器显示这些数据,同时保证与服务器的连接.当服务器需要再 ...

  4. Comet技术在Java Web中的应用

    HTTP协议是互联网上大量信息交换的基础,其特点是,它是基于请求-响应模式的无状态的单向协议,即,必须由客户端发起一个请求建立连接,服务器接收请 求,把数据返回给客户端,然后释放连接.下一次,再由客户 ...

  5. 现在学习 JavaScript 的哪种技术更好:Angular、jQuery 还是 Node.js?(转)

    本文选自<开发者头条>1 月 7 日最受欢迎文章 Top 3,感谢作者 @WEB资源网 分享. 欢迎分享:http://toutiao.io/contribute 这是一个发布在 Quor ...

  6. Comet技术

    1.Comet是什么? 维基百科: Comet是一种用于web的推送技术,能使服务器实时地将更新的信息传送到客户端,而无须客户端发出请求,目前有两种实现方式,长轮询和iframe流. 说白了就是web ...

  7. Comet技术浅论

    1.如何实现一个轮询? function getMessage(url,callback){ var XHR=new XMLHttpRequest(); XHR.open('get',url,true ...

  8. 前后台交互经常使用的技术汇总(后台:Java技术,前台:Js或者Jquery)

    1:由于针对特定的前后台交互用到的知识总结,所以不大量贴代码,主要给出思路,方便自己以后脑补和技术总结,当然也希望可以帮助到别人. 后台Json和其他格式转化,之前总结过Json和对象,集合,字符串的 ...

  9. Comet:基于 HTTP 长连接的“服务器推”技术解析

    原文链接:http://www.cnblogs.com/deepleo/p/Comet.html 一.背景介绍 传统web请求,是显式的向服务器发送http Request,拿到Response后显示 ...

随机推荐

  1. 004 range的用法

  2. 用canvas绘制一个时钟

    实现一个时钟的绘制和时间的显示 一,首先是页面的搭建html部分以及一点点的css代码,因为css这块用的比较少,所以就没有单独出来: <!DOCTYPE html> <html l ...

  3. Java内存模型(转载)

    1. 概述 多任务和高并发是衡量一台计算机处理器的能力重要指标之一.一般衡量一个服务器性能的高低好坏,使用每秒事务处理数(Transactions Per Second,TPS)这个指标比较能说明问题 ...

  4. Unix环境下PS1变量的设置

    我的ps1命令提示符: export PS1="\[\e[31;1m\]\u @ \[\e[34;1m\]\h \[\e[36;1m\]\w \[\e[33;1m\]\t $ \[\e[37 ...

  5. MySQL高效获取记录总数

    通常mysql获取查询记录总数我们使用如下语句: SELECT COUNT(*) FROM users WHERE k='avs';  或:SELECT id FROM goods WHERE k=' ...

  6. WinCe 如何使应用程序只开启一个

    方法一: namespace MyNameSpace{ static class Program { [DllImport("Toolhelp.dll")] public stat ...

  7. python中的星号*、**的意义

    我们都知道,定义一个函数,当传入的参数个数未知时就可以使用*来表示. 单引号*: def test(*args): if len(args) >= 4: print(arg[3]) test(1 ...

  8. atomic_compare_exchange

    atomic_compare_exchange 分为两个版本 atomic_compare_exchange_strong 和 atomic_compare_exchange_weak,语义如下 bo ...

  9. SHUTDOWN: Active processes prevent shutdown operation

    在使用shutdown immediate关闭数据库时hang住,查看alert 日志,遭遇了SHUTDOWN: Active processes prevent shutdown operation ...

  10. 【floyed】【HDU1217】【Arbitrage】

    题目大意: 给你几种货币,以及几种汇率关系,问是否存在套利的可能? 思路: 初步想法:图上存在一个环的路径上权值相乘大于1.... 再者:该如何找到图上所有环呢.... 好吧 经过鸟神 和 况神的指点 ...