当前位置:首页 > PHP

php 实现心跳

2026-02-28 13:41:15PHP

PHP 实现心跳机制的方法

心跳机制通常用于维持长连接或检测客户端是否在线。以下是几种常见的实现方式:

使用 AJAX 轮询

客户端定期向服务器发送请求,服务器返回响应表示连接正常。

// 服务器端 heartbeat.php
header('Content-Type: application/json');
echo json_encode(['status' => 'alive', 'timestamp' => time()]);
// 客户端 JavaScript
setInterval(function() {
    fetch('heartbeat.php')
        .then(response => response.json())
        .then(data => console.log(data));
}, 30000); // 每30秒发送一次

WebSocket 心跳

对于 WebSocket 连接,可以通过定时发送消息实现心跳。

// WebSocket 服务器示例(使用 Ratchet 库)
use Ratchet\MessageComponentInterface;
use Ratchet\ConnectionInterface;

class Heartbeat implements MessageComponentInterface {
    public function onOpen(ConnectionInterface $conn) {
        // 新连接
    }

    public function onMessage(ConnectionInterface $conn, $msg) {
        // 处理消息
        if ($msg === 'PING') {
            $conn->send('PONG');
        }
    }

    // ...其他方法
}

数据库记录心跳

通过定期更新数据库中的时间戳来跟踪活动状态。

// 更新心跳时间戳
function updateHeartbeat($userId) {
    $pdo = new PDO('mysql:host=localhost;dbname=test', 'user', 'pass');
    $stmt = $pdo->prepare("UPDATE users SET last_heartbeat = NOW() WHERE id = ?");
    $stmt->execute([$userId]);
}

文件锁机制

使用文件系统记录最后一次活动时间。

php 实现心跳

function checkHeartbeat($clientId) {
    $file = "/tmp/heartbeat_{$clientId}.lock";
    touch($file); // 更新文件修改时间

    // 检查是否超时(30秒无心跳)
    if (time() - filemtime($file) > 30) {
        return false; // 心跳超时
    }
    return true;
}

注意事项

  • 心跳间隔应根据实际需求设置,太短会增加服务器负载,太长会影响实时性
  • 对于大量连接的情况,建议使用更高效的方案如Redis
  • 需要考虑网络延迟和时钟同步问题
  • 心跳超时后应有相应的重连或清理机制

标签: php
分享给朋友:

相关文章

php实现socket

php实现socket

PHP 实现 Socket 通信 PHP 可以通过 socket 扩展实现网络通信,支持 TCP/UDP 协议。以下是实现 Socket 通信的核心步骤和代码示例。 创建 TCP 服务器 // 创建…

php实现websocket

php实现websocket

PHP 实现 WebSocket WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议。PHP 可以通过多种方式实现 WebSocket 功能,以下是几种常见的方法: 使用 Ratc…

php实现登录

php实现登录

PHP 登录功能实现 数据库连接与用户表创建 创建一个数据库连接文件 db.php,用于管理数据库连接。MySQL 示例代码如下: <?php $host = 'localhost'; $db…

php实现异步

php实现异步

PHP 实现异步的方法 PHP 本身是同步执行的脚本语言,但可以通过以下方法模拟异步操作或实现异步效果: 使用多进程(pcntl_fork) 通过 pcntl_fork 创建子进程实现异步,适用于…

php实现统计

php实现统计

PHP 实现统计功能 在 PHP 中实现统计功能通常涉及数据的收集、处理和展示。以下是一些常见的统计实现方法: 数据库数据统计 通过 SQL 查询可以直接从数据库中获取统计结果: $conn =…

无限分类实现 php

无限分类实现 php

无限分类的实现方法 无限分类通常用于构建多层级结构的数据,如商品分类、部门架构等。以下是几种常见的实现方式: 邻接列表模式(Adjacency List) 邻接列表是最简单的实现方式,通过在每个记录…