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(); // 每次执行完,退出程序, 资源也会释放
}
?>