长轮询(Long Polling)是一种服务器推送技术,允许服务器在有新数据可用时主动推送给客户端
long_polling.php
,并设置一个适当的超时时间:<?php
// 设置脚本超时时间(单位:秒)
ini_set('max_execution_time', 30);
function getNewData() {
// 从文件中读取数据
$data = file_get_contents('data.txt');
// 返回数据
return $data;
}
$data = null;
while (true) {
// 获取新数据
$newData = getNewData();
// 检查是否有新数据
if ($newData !== $data) {
// 更新数据
$data = $newData;
// 将新数据发送回客户端
echo $data;
break;
} else {
// 没有新数据,等待一段时间后再次尝试
sleep(1);
}
}
long_polling.php
:<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Long Polling Example</title>
<script>
function longPolling() {
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState == 4 && xhr.status == 200) {
// 处理服务器返回的数据
console.log("Received data: " + xhr.responseText);
// 继续进行长轮询
longPolling();
}
};
xhr.open("GET", "long_polling.php", true);
xhr.send();
}
// 开始长轮询
window.onload = longPolling;
</script>
</head>
<body>
<h1>Long Polling Example</h1>
</body>
</html>
现在,当有新数据可用时,服务器将主动推送给客户端。客户端将持续请求新数据,直到服务器关闭连接或发生错误。