温馨提示×

如何在PHP中实现长轮询

PHP
小樊
89
2024-09-12 16:01:07
栏目: 编程语言

长轮询(Long Polling)是一种服务器推送技术,允许服务器在有新数据可用时主动推送给客户端

  1. 创建一个PHP文件,例如long_polling.php,并设置一个适当的超时时间:
<?php
// 设置脚本超时时间(单位:秒)
ini_set('max_execution_time', 30);
  1. 定义一个函数来获取新数据。这里我们使用一个简单的示例,从文本文件中读取数据:
function getNewData() {
    // 从文件中读取数据
    $data = file_get_contents('data.txt');
    
    // 返回数据
    return $data;
}
  1. 使用一个循环来等待新数据。在循环中,我们将检查是否有新数据可用。如果没有新数据,我们将继续等待。如果有新数据,我们将将其发送回客户端并退出循环。
$data = null;
while (true) {
    // 获取新数据
    $newData = getNewData();
    
    // 检查是否有新数据
    if ($newData !== $data) {
        // 更新数据
        $data = $newData;
        
        // 将新数据发送回客户端
        echo $data;
        break;
    } else {
        // 没有新数据,等待一段时间后再次尝试
        sleep(1);
    }
}
  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>

现在,当有新数据可用时,服务器将主动推送给客户端。客户端将持续请求新数据,直到服务器关闭连接或发生错误。

0