当前位置:首页 > PHP

php 实现长连接

2026-04-02 22:28:34PHP

使用 header() 函数实现长连接

在 PHP 中,可以通过设置 HTTP 头信息 Connection: keep-aliveKeep-Alive: timeout=x, max=y 来实现长连接。示例代码如下:

header("Connection: keep-alive");
header("Keep-Alive: timeout=60, max=1000");
  • timeout=60 表示连接保持 60 秒。
  • max=1000 表示最多允许 1000 次请求复用同一个连接。

使用 ob_flush()flush() 保持连接

在长连接场景下(如实时数据推送),可以使用输出缓冲机制保持连接不中断:

// 关闭输出缓冲
if (ob_get_level() > 0) {
    ob_end_flush();
}

// 推送数据
while (true) {
    echo "Data: " . date("Y-m-d H:i:s") . "\n";
    ob_flush();
    flush();
    sleep(1); // 每秒推送一次
}

结合 WebSocket 实现持久连接

PHP 原生不支持 WebSocket,但可以通过以下方式实现:

  1. 使用 Ratchet(推荐):
    安装 Ratchet:

    composer require cboden/ratchet

    示例服务端代码:

    use Ratchet\Server\IoServer;
    use Ratchet\Http\HttpServer;
    use Ratchet\WebSocket\WsServer;
    use MyApp\Chat; // 自定义处理类
    
    require dirname(__DIR__) . '/vendor/autoload.php';
    
    $server = IoServer::factory(
        new HttpServer(new WsServer(new Chat())),
        8080
    );
    $server->run();
  2. 自定义 WebSocket 处理类

    namespace MyApp;
    use Ratchet\MessageComponentInterface;
    use Ratchet\ConnectionInterface;
    
    class Chat implements MessageComponentInterface {
        public function onOpen(ConnectionInterface $conn) {
            // 新连接逻辑
        }
        public function onMessage(ConnectionInterface $from, $msg) {
            // 处理消息
        }
        public function onClose(ConnectionInterface $conn) {
            // 连接关闭逻辑
        }
        public function onError(ConnectionInterface $conn, \Exception $e) {
            // 错误处理
        }
    }

使用 fsockopen 实现 TCP 长连接

适用于非 HTTP 协议的持久连接:

php 实现长连接

$socket = fsockopen("tcp://example.com", 8080, $errno, $errstr, 30);
if (!$socket) {
    die("Failed: $errstr ($errno)");
}

// 发送数据
fwrite($socket, "PING\n");
// 接收响应
while (!feof($socket)) {
    echo fgets($socket, 128);
}
fclose($socket);

注意事项

  • Nginx/Apache 配置:确保服务器支持长连接(如 Nginx 的 keepalive_timeout)。
  • 资源消耗:长连接会占用服务器资源,需合理设置超时和最大请求数。
  • WebSocket:需依赖外部库或扩展(如 RatchetSwoole)。

以上方法可根据实际场景选择,HTTP 长连接适合短时复用,WebSocket 适合实时双向通信。

标签: php
分享给朋友:

相关文章

php实现搜索功能

php实现搜索功能

实现基本的搜索功能 在PHP中实现搜索功能通常涉及数据库查询。以下是一个简单的实现方式,假设使用MySQL数据库: <?php // 连接数据库 $conn = new mysqli('loc…

php实现表单

php实现表单

PHP 表单基础实现 创建一个简单的 PHP 表单需要 HTML 表单结构和 PHP 处理脚本。以下是一个完整的示例: HTML 表单部分 (form.html) <form action=…

php 路由实现

php 路由实现

PHP 路由实现方法 在 PHP 中实现路由功能有多种方式,以下是几种常见的实现方法: 使用原生 PHP 实现 通过解析 URL 并匹配对应的控制器和动作: $request = $_SERVER…

php搜索功能实现

php搜索功能实现

实现基本的PHP搜索功能 使用MySQL数据库和PHP实现简单的关键词搜索功能。需要确保数据库中有可供搜索的表和数据。 // 连接数据库 $conn = new mysqli('localhost'…

php实现统计

php实现统计

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

php 实现跳转

php 实现跳转

PHP 实现页面跳转的方法 在PHP中,实现页面跳转可以通过多种方式完成,以下是几种常用的方法: 使用header函数 header函数是PHP中最常用的跳转方法,通过发送HTTP头部信息实现跳转。…