如何在PHP中实现长轮询

1949idc 2年前 (2024-09-18) 阅读数 290 #编程语言

长轮询(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>

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

版权声明

本文内容由互联网用户自发贡献,该文观点仅代表作者本人
本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。

© 2010 首途云安 & 厦门硕顿信息技术有限公司 & 闽ICP备11016866号  增值电信业务经营许可证:B1-20203020 地址:福建厦门思明区嘉禾路297号1806
高新技术企业
软件产品证书
计算机软件著作权
ISO认证
国家3A企业