当前位置:首页 > PHP

php 实现长轮询

2026-04-03 00:17:16PHP

PHP 实现长轮询

长轮询(Long Polling)是一种模拟实时通信的技术,客户端发送请求后,服务器在有数据更新时才返回响应,否则保持连接直到超时。以下是实现方法:

客户端 JavaScript 部分

使用 fetchXMLHttpRequest 发起请求,并在响应返回后立即发起下一次请求:

php 实现长轮询

function longPoll() {
    fetch('long_polling.php')
        .then(response => response.json())
        .then(data => {
            console.log("收到数据:", data);
            longPoll(); // 递归调用保持持续监听
        })
        .catch(error => {
            console.error("请求失败:", error);
            setTimeout(longPoll, 3000); // 失败后延迟重试
        });
}
longPoll(); // 启动长轮询

服务器端 PHP 部分

通过循环检查数据变化或等待超时,避免频繁请求:

php 实现长轮询

<?php
header('Content-Type: application/json');
set_time_limit(0); // 禁用脚本超时

$dataFile = 'data.json';
$timeout = 30; // 长轮询超时时间(秒)
$startTime = time();

while (true) {
    // 检查数据是否更新(示例:文件修改时间)
    $lastModified = filemtime($dataFile);
    if ($lastModified > ($_GET['lastUpdate'] ?? 0)) {
        $data = json_decode(file_get_contents($dataFile), true);
        echo json_encode(['data' => $data, 'timestamp' => $lastModified]);
        break;
    }

    // 超时处理
    if (time() - $startTime >= $timeout) {
        echo json_encode(['data' => null, 'timestamp' => $lastModified]);
        break;
    }

    usleep(500000); // 减少CPU占用(0.5秒间隔检查)
}
?>

数据更新触发

通过其他接口或文件操作更新数据源(如 data.json):

<?php
file_put_contents('data.json', json_encode(['message' => '新数据']));
touch('data.json'); // 更新文件修改时间
?>

优化建议

  • 连接管理:确保服务器配置(如 Nginx/Apache)允许长连接,调整 keepalive_timeout
  • 错误处理:客户端需处理网络中断,实现自动重连逻辑。
  • 性能考虑:高并发时改用事件驱动架构(如 Swoole)或 WebSocket。

替代方案

若需更高实时性,可考虑以下技术:

  • WebSocket:全双工通信,适合高频更新场景。
  • Server-Sent Events (SSE):单向服务器推送,兼容性优于 WebSocket。

以上代码提供了基础实现框架,可根据实际需求调整超时时间和数据检查逻辑。

标签: php长轮询
分享给朋友:

相关文章

php购物车实现

php购物车实现

PHP购物车实现方法 使用PHP实现购物车功能可以通过多种方式完成,以下是几种常见的实现方法: Session存储购物车数据 利用PHP的$_SESSION超全局变量存储购物车数据是最简单的方法。用…

php 实现购物车

php 实现购物车

PHP 实现购物车功能 购物车功能是电子商务网站的核心部分,可以通过 PHP 和 Session 或数据库来实现。以下是两种常见的实现方式: 使用 Session 存储购物车数据 Session 是…

php实现即时通讯

php实现即时通讯

PHP 实现即时通讯的方案 即时通讯(IM)可以通过多种方式实现,PHP 作为服务器端语言,通常需要结合前端技术(如 WebSocket、AJAX)或第三方服务来实现实时通信。以下是几种常见的实现方式…

php实现登陆

php实现登陆

PHP 实现登录功能 创建登录表单 在 HTML 文件中创建一个登录表单,包含用户名和密码输入框,表单的 action 属性指向处理登录的 PHP 文件。 <form action="logi…

php 实现mvc

php 实现mvc

PHP 实现 MVC 架构的方法 MVC(Model-View-Controller)是一种常见的软件设计模式,用于分离业务逻辑、用户界面和用户输入。以下是 PHP 实现 MVC 架构的关键步骤:…

php 购物车实现session

php 购物车实现session

PHP 购物车实现(基于 Session) 在 PHP 中,使用 Session 实现购物车功能是一种常见方法。Session 可以跨页面存储用户数据,适合临时保存购物车信息。 初始化 Sessio…