長輪詢(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>
現在,當有新數據可用時,服務器將主動推送給客戶端。客戶端將持續請求新數據,直到服務器關閉連接或發生錯誤。