我的第一个comet长连接例子

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我的第一个comet长连接例子相关的知识,希望对你有一定的参考价值。

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">

<meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
<title>Comet Test</title>
<script src="../statics/js/jquery-1.9.1.min.js"></script>
</head>
<body>
<script type="text/javascript">
$(function(){
    function handleResponse(response){
    $(#content).append(<div> + response[msg] + </div>);
    }
 
    var timestamp = 0;
    var url = server.php;
    var noerror = true;
    var ajax;
 
    function connect() {
        ajax = $.ajax(url, {
            type: get,
            data: { timestamp : timestamp },
            success: function(transport) {
                eval(var response = +transport);
                timestamp = response[timestamp];
                handleResponse(response);
                noerror = true;
            },
            complete: function(transport) {
                (!noerror) && setTimeout(function(){ connect() }, 5000) || connect();
                noerror = false;
            }
        });
    }
 
    function doRequest(request) {
        $.ajax(url, {
            type: get,
            data: { msg : request }
        });
    };
    
    $(#cometForm).on("submit",function(){
        
        doRequest($(#word).val());
        $(#word).val(‘‘);
        return false;
    });
    
    
    connect();

});
</script>
<div id="content"></div>
<div style="margin: 5px 0;">
<form action="javascript:void(0);" id="cometForm" method="get">
<input id="word" name="word" type="text" value="">
<input name="submit" type="submit" id="btn" value="Send">
 
</form></div>
</body>
</html>

 

<?php
 
$filename  = ‘F:\phpStudy\WWW\boss\cometDemo\data.txt‘;

// 消息都储存在这个文件中
$msg = isset($_GET[‘msg‘]) ? $_GET[‘msg‘] : ‘‘;

if ($msg != ‘‘){
    //fopen()方法:如果文件不存在,则创建,如果存在则打开文件。它的第二个参数是打开的文件的模式,w表示覆盖式只写,详见《PHP高程设计》183页
    $fn = fopen($filename,‘w‘);
    fwrite($fn,$msg);
    fclose($fn);
//    file_put_contents($filename,$msg); 此方法已不建议使用
    
}

    // 不停的循环,直到储存消息的文件被修改
    $lastmodif    = isset($_GET[‘timestamp‘]) ? $_GET[‘timestamp‘] : 0;
    $currentmodif = filemtime($filename);
    while ($currentmodif <= $lastmodif){ // 如果数据文件已经被修改
        usleep(100000); // 100ms暂停 缓解CPU压力
        clearstatcache(); //清除缓存信息
        $currentmodif = filemtime($filename);
    }
 
    // 返回json数组
    $response = array();
    $response[‘msg‘]       = file_get_contents($filename);
    $response[‘timestamp‘] = $currentmodif;
    echo json_encode($response);
    flush();

 
?>

自备jquery1.9.1,并改写下txt文件的路径

以上是关于我的第一个comet长连接例子的主要内容,如果未能解决你的问题,请参考以下文章

轮询长轮询comet长连接SSEwebsocket

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

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

php javascript comet

如何使用 Flash 实现 Comet

基于go语言的消息推送系统架构分析