php长连接实现
PHP 长连接实现方法
长连接(Keep-Alive)在 PHP 中可以通过多种方式实现,主要用于减少 HTTP 连接的开销或维持持久化的通信。以下是几种常见实现方式:
HTTP Keep-Alive 配置
在 PHP 中启用 HTTP Keep-Alive 可以通过修改服务器配置或 PHP 脚本实现。Apache 或 Nginx 的配置文件中通常包含相关参数:
# Apache 配置示例
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 15
# Nginx 配置示例
keepalive_timeout 65;
keepalive_requests 100;
PHP 脚本手动控制
通过手动设置 HTTP 头部实现长连接:
<?php
header('Connection: keep-alive');
header('Keep-Alive: timeout=60, max=100');
// 后续业务逻辑
?>
WebSocket 实现长连接
对于需要双向实时通信的场景,WebSocket 是更合适的选择:
// 使用 Ratchet 库实现 WebSocket 服务端
use Ratchet\MessageComponentInterface;
use Ratchet\ConnectionInterface;
class MyChat 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) {
// 错误处理
}
}
$app = new Ratchet\App('localhost', 8080);
$app->route('/chat', new MyChat);
$app->run();
Swoole 扩展实现
Swoole 提供了高性能的长连接支持:
$server = new Swoole\Http\Server("0.0.0.0", 9501);
$server->on('request', function ($request, $response) {
$response->header("Content-Type", "text/plain");
$response->end("Hello World\n");
});
$server->start();
数据库持久连接
PHP 中数据库连接也可以通过持久化方式减少开销:

$dbh = new PDO(
'mysql:host=localhost;dbname=test',
'username',
'password',
array(PDO::ATTR_PERSISTENT => true)
);
注意事项
- 长连接会占用服务器资源,需要合理设置超时时间和最大请求数
- WebSocket 实现需要额外的端口和协议支持
- Swoole 等扩展需要额外安装且运行在 CLI 模式
- 数据库持久连接可能导致连接数超出限制
根据具体应用场景选择合适的长连接实现方式,对于高并发实时应用推荐使用 WebSocket 或 Swoole 方案。






