如何在PHP中实现长轮询
长轮询(Long Polling)是一种服务器推送技术,允许服务器在有新数据可用时主动推送给客户端
- 创建一个PHP文件,例如
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);
}
}
- 在HTML文件中,使用JavaScript创建一个XMLHttpRequest对象来请求
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>
现在,当有新数据可用时,服务器将主动推送给客户端。客户端将持续请求新数据,直到服务器关闭连接或发生错误。
上一篇:PHP轮询与WebSocket有何区别 下一篇:PHP轮询中如何有效管理会话状态
高防服务器,游戏服务器,高防IP,服务器租用托管





