阅读量:0
长轮询(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>
现在,当有新数据可用时,服务器将主动推送给客户端。客户端将持续请求新数据,直到服务器关闭连接或发生错误。