(一)数据推送之comet

介绍

之前参与项目里,见到过有人用ajax长轮询来做实时数据推送。但是这样做有一个弊端就是会建立很多TCP连接,这样会给系统带来比较大的IO负担。

有没有一种方式,我们只进行一次TCP连接,在这一次TCP连接中,服务器不断给客户端吐数据。下面我们就来介绍一下comet推送方式:

comet推送方式

我们用php来做服务端

";
        ob_flush(); // 把当前资源释放掉
        flush();    // 拿到释放掉的资源,吐浏览器
        // 一直让它输出,而且是一个流式输出
    }
?>

js怎样捕捉一直在发送阶段


那我们能不能用普通的ajax来实现呢,也是可以的

js用普通ajax去请求


服务端我们不去断掉连接

'ok','test'=>'我是测试文本');
    echo json_encode($res); 
?>

或者我们用下面这种方式,用一个while循环,我们可以通过前端给来的参数去判断执行过少次。

'ok','test'=>'我是测试文本');
        echo json_encode($res); 
        exit(); // 切记要退出,不然前端拿不到数据
    }
?>

因为只要不断掉,我们再去请求还是连接的上一次请求,只不过这是用前端实现了轮询效果,刚才我们用后端flush()来实现的这件事

你可能感兴趣的:((一)数据推送之comet)