猿人旅程我爱编程

JavaScript 数据推送:《Comet:基于HTTP长连接

2018-04-09  本文已影响22人  Junting

Comet 是什么?

Comet 是一种Http 长连接技术,像服务器器发送一个请求,服务器不释放资源,不停的向前端输出数据。(ajax 发起一个请求, 服务器死循环,每次执行输出资源到前端)

一个简单的例子实现:

前端

$.ajax({
    url: 'data.php',
    success: function (res) {
          console.log(res);
    }
});


前端也可以每隔多少秒请求一次,来实现长连接,实时数据的模拟,但是很消耗请求资源。
可以用原生ajax 的监听 状态 3 来发现请求一直处于捕获当中。

后端(php)

<?php
  header("Content-Type:  application/json;charset=utf-8");
# 设置无缓存,输出无缓存
  header("Cache-Control: max-age=0");
   
# 实现资源不释放
while(true) { // 死循环
   sleep(5); // 等待 5秒继续
    $res = array('success' => 'ok', 'text': "测试文本");
   echo json_encode($res);
  #  为不让程序挂了,每执行完一次,不去缓存页面,已缓存形式结束掉,下一次重新开始
  ob_flush(); // 释放资源,不向前端吐数据
  flush();  // 拿到释放的资源向前端发送数据
  
 # 不用 ob_flush() 、 flush(); 不推荐下面的方式
 exit(); // 每次执行完,退出程序, 资源也会释放
}
?>
上一篇下一篇

猜你喜欢

热点阅读