具体看代码,费话不说

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. vim自动补全文章搜集

    引用文章A:http://blog.csdn.net/wendy260310/article/details/18035555 文章介绍:添加C++标准库的tags文件方法.(中文版) 引用文章B:h ...

  2. crontab指令详解

    引用:http://www.cnblogs.com/xiaoluo501395377/archive/2013/04/06/3002602.html 具体指令请参考文章:linux指令. 详细版推荐原 ...

  3. pcl1.7.2_vs2013_x64工程配置

    pcl1.7.2_vs2013_x64工程配置 C:\Program Files\PCL 1.7.2\include\pcl-1.7;C:\Program Files\PCL 1.7.2\3rdPar ...

  4. MysqlDataSource里的Connection实现类实现了isValid(int timeout)方法

    在项目中,需要连接mysql数据库的时候,我们最好选择使用数据库连接池,即需要选择DataSource. 而在使用c3p0的ComboPooledDataSource时,发现它的Connection实 ...

  5. C#控制台程序本地化应用(Localization)

    本地化在百度百科上的解释如下: “软件本地化是指将某一产品的用户界面(UI)和辅助材料(文档资料和在线帮助菜单)从其原产国语言向另一种语言转化,使之适应某一外国语言和文化的过程.” 其原理主要是把相同 ...

  6. HTML5 drawImage 使用问题

    使用Image遇到的问题: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...

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

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

  8. you can Solve a Geometry Problem too(hdoj1086)

    Problem Description Many geometry(几何)problems were designed in the ACM/ICPC. And now, I also prepare ...

  9. QString转LPCWSTR

    QFileInfo info("./records.db"); std::string str = info.absoluteFilePath().toStdString(); / ...

  10. 关于采用MVC开发默认路由导致首页部分文件访问失效的临时解决方案

    最近开发中涉及了Mvc4的开发,其中的默认路由功能是很不错的东西,但是在实际应用中就出现了不少的问题.比如我们访问某网站http://www.abc.com,虽然路由会帮助自动转向Home/Index ...