博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
COMET技术具体实现 结合PHP和JQUERY
阅读量:5017 次
发布时间:2019-06-12

本文共 2876 字,大约阅读时间需要 9 分钟。

具体看代码,费话不说

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 ajaxvar 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请求,又没有降低实时性。

转载于:https://www.cnblogs.com/elonlee/p/3850902.html

你可能感兴趣的文章
9-5
查看>>
Laxcus大数据管理系统2.0(5)- 第二章 数据组织
查看>>
kafka入门样例 for java
查看>>
Redis存储AccessToken
查看>>
Use commons-email-1.1.jar+activation.jar+mail.jar to send Email
查看>>
hdu 2160 Sequence one(DFS)
查看>>
ATM实验感受
查看>>
csharp基础
查看>>
hdu4497 正整数唯一分解定理应用
查看>>
html5 拖曳功能的实现[转]
查看>>
[BZOJ 2049] [Sdoi2008] Cave 洞穴勘测 【LCT】
查看>>
java导出word[xml方式]
查看>>
mysql load_file()和 into outfile
查看>>
响应式布局编码
查看>>
微服务实战(三):深入微服务架构的进程间通信 - DockOne.io
查看>>
Android菜鸟的成长笔记(6)——剖析源码学自定义主题Theme
查看>>
Java:类与继承
查看>>
struts2-(2)HelloWorld
查看>>
python常用函数 库 转
查看>>
第一次爱你得是啥时候
查看>>