COMET技术具体实现 结合PHP和JQUERY

具体看代码,费话不说

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

时间: 2024-08-29 10:54:10

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

基于 Asp.Net的 Comet 技术解析

Comet技术原理 来自维基百科:Comet是一种用于web的技术,能使服务器能实时地将更新的信息传送到客户端,而无须客户端发出请求,目前有两种实现方式,长轮询和iframe流. 简单的说是一种基于现有Http协议基础上的长轮询技术,之所有会产生这种技术的主要原因是Http协议是无状态的所以客户端和服务端之间没办法建立起一套长时间的连接.比如我们要做一个聊天室,在Web环境下我们通常不能从服务端推送消息到浏览器里,而只能通过每个客户端不断的轮询服务器,以获取最新的消息,这样一来效率非常低,而且不

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

前言 一般来说,Web端即时通讯技术因受限于浏览器的设计限制,一直以来实现起来并不容易,主流的Web端即时通讯方案大致有4种:传统Ajax短轮询.Comet技术.WebSocket技术.SSE(Server-sent Events). 关于这4种技术方式的优缺点,请参考<Web端即时通讯技术盘点:短轮询.Comet.Websocket.SSE>.本文将专门讲解Comet技术.(本文同步发布于:http://www.52im.net/thread-334-1-1.html) 学习交流 - 即时通

Comet技术在IM上的应用

对于数据转发我们一般就两种模式,一种时推模式,一种时拉模式.下面我们简单介绍一下推模式和拉模式. 推模式 该模式下,一般是消息源直接推送给目标群体或推送给Broker,由Broker推送给目标群体. 这个模式下,每一个接收者都有一份数据复制.这种情况下,写入压力非常大,但是读取的压力非常小并且实时性非常高.是一种以空间换时间的模式. 拉模式 该模式下,一般是消息源将数据推送到存储中,目标群体定时或因为某些原因出发拉取动作. 这个模式下,所有接收者共享一份数据复制.这种情况下,写入压力小,但是读取

转:基于ASP.NET的Comet长连接技术解析

原文来自于: Comet技术原理 来自维基百科:Comet是一种用于web的技术,能使服务器能实时地将更新的信息传送到客户端,而无须客户端发出请求,目前有两种实现方式,长轮询和iframe流. 简单的说是一种基于现有Http协议基础上的长轮询技术,之所有会产生这种技术的主要原因是Http协议是无状态的所以客户端和服务端之间没办法建立起一套长时间的连接.比如我们要做一个聊天室,在Web环境下我们通常不能从服务端推送消息到浏览器里,而只能通过每个客户端不断的轮询服务器,以获取最新的消息,这样一来效率

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

“服务器推”技术的应用 传统模式的 Web 系统以客户端发出请求.服务器端响应的方式工作.这种方式并不能满足很多现实应用的需求,譬如: 监控系统:后台硬件热插拔.LED.温度.电压发生变化: 即时通信系统:其它用户登录.发送信息: 即时报价系统:后台数据库内容发生变化: 这些应用都需要服务器能实时地将更新的信息传送到客户端,而无须客户端发出请求.“服务器推”技术在现实应用中有一些解决方案,本文将这些解决方案分为两类:一类需要在浏览器端安装插件,基于套接口传送信息,或是使用 RMI.CORBA 进

Comet——随着AJAX技术兴起而产生的新技术

不得不说Ajax确实是一个好东西,由它的出现使得WEB端新技术不断产生,Comet就属于这么一个技术,这个技术有时叫做反向AJAX,有时叫做服务器"推"技术,嗯,不要被牛逼闪闪的名词吓倒,其实没那么难. 先看一下维基的解释: "Comet是一种用于web的推送技术,能使服务器实时地将更新的信息传送到客户端,而无须客户端发出请求,目前有两种实现方式,Ajax和iframe流." ——维基百科 维基的解释比较绕,那我们用人话来解释一下: 凡是由服务端(即服务器,再具体点

Web端即时通讯技术盘点:短轮询、Comet、Websocket、SSE

摘要 Web端即时通讯技术因受限于浏览器的设计限制,一直以来实现起来并不容易,主流的Web端即时通讯 方案大致有4种:传统Ajax短轮询.Comet技术.WebSocket技术.SSE(Server-sent Events).本文将简要介绍这4种技术的原理,并指出各自的异同点.优缺点等. 1. 前言 Web端即时通讯技术因受限于浏览器的设计限制,一直以来实现起来并不容易,主流的Web端即时通讯方案大致有4种:传统Ajax短轮询. Comet技术.WebSocket技术.SSE(Server-se

【转】Comet:基于 HTTP 长连接的“服务器推”技术

原文链接:http://www.ibm.com/developerworks/cn/web/wa-lo-comet/ 很多应用譬如监控.即时通信.即时报价系统都需要将后台发生的变化实时传送到客户端而无须客户端不停地刷新.发送请求.本文首先介绍.比较了常用的“服务器推”方案,着重介绍了 Comet - 使用 HTTP 长连接.无须浏览器安装插件的两种“服务器推”方案:基于 AJAX 的长轮询方式:基于 iframe 及 htmlfile 的流方式.最后分析了开发 Comet 应用需要注意的一些问题

WEB实时聊天 comet推技术

转自:http://www.cnblogs.com/wodemeng/archive/2012/04/06/2435302.html 今天晚上朋友遇到web服务端推技术的问题,自己就查了下资料,学习了下 源代码:http://files.cnblogs.com/wodemeng/AspNetComet.zip Comet 有时也称反向 Ajax 或服务器端推技术(server-side push).其思想很简单:将数据直接从服务器推到浏览器,而不必等到浏览器请求数据. =============