当前位置:首页 > PHP

php 实现长连接

2026-02-27 13:39:54PHP

PHP 实现长连接的方法

使用 header() 函数设置连接保持

通过设置 HTTP 头信息实现长连接,适用于简单的 HTTP 长连接场景。

header("Connection: keep-alive");
header("Keep-Alive: timeout=60, max=1000");

timeout 指定连接保持时间(秒),max 指定最大请求次数。

结合 ob_flush()flush() 实现服务器推送

适用于需要服务器主动推送数据的场景(如实时通知)。

// 关闭输出缓冲
while (ob_get_level() > 0) ob_end_flush();

header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');

while (true) {
    echo "data: " . date('Y-m-d H:i:s') . "\n\n";
    ob_flush();
    flush();
    sleep(1);
}

使用 Swoole 扩展实现高性能长连接

适用于需要高并发长连接的场景(如聊天室)。

$server = new Swoole\WebSocket\Server("0.0.0.0", 9501);

$server->on('open', function ($server, $request) {
    echo "connection open: {$request->fd}\n";
});

$server->on('message', function ($server, $frame) {
    $server->push($frame->fd, "Server: {$frame->data}");
});

$server->on('close', function ($server, $fd) {
    echo "connection close: {$fd}\n";
});

$server->start();

数据库持久连接

通过 pconnect() 实现数据库长连接,减少连接开销。

php 实现长连接

$link = mysql_pconnect("localhost", "user", "password");
if (!$link) {
    die('Could not connect: ' . mysql_error());
}

注意事项

  • HTTP 长连接受限于浏览器和服务器配置,非真正的双向通信
  • 长时间运行的脚本需设置 set_time_limit(0)
  • WebSocket 实现需浏览器支持,服务端推荐使用 Swoole/Workerman
  • 保持连接会占用服务器资源,需合理设置超时时间

标签: php
分享给朋友:

相关文章

php长连接实现

php长连接实现

PHP 长连接实现方法 长连接(Keep-Alive)允许客户端与服务器在一次TCP连接中发送和接收多个HTTP请求/响应,减少重复建立连接的开销。以下是PHP中实现长连接的几种方式: 配置HTTP…

php实现排序

php实现排序

PHP 数组排序方法 PHP 提供了多种内置函数用于数组排序,适用于不同的排序需求。以下是常见的排序方法: 按值升序排序 sort() 函数对数组按值升序排序,重置键名(索引数组适用): $num…

php无限分类的实现

php无限分类的实现

PHP无限分类的实现 无限分类是一种常见的树形结构数据组织方式,适用于商品分类、菜单管理、地区选择等场景。以下是几种实现方法: 递归实现法 递归是最直观的实现方式,通过函数自身调用来遍历子分类。数据…

php 实现队列

php 实现队列

PHP 实现队列的方法 PHP 可以通过多种方式实现队列功能,以下是几种常见的实现方法: 使用数组实现队列 PHP 数组可以通过 array_push 和 array_shift 函数模拟队列的先进…

无限分类实现 php

无限分类实现 php

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

php实现https

php实现https

PHP 实现 HTTPS 请求 在 PHP 中实现 HTTPS 请求,可以通过多种方式完成,包括使用内置函数、cURL 扩展或第三方库。以下是几种常见的方法: 使用 file_get_content…