php长连接实现
PHP 长连接实现方法
长连接(Keep-Alive)允许客户端与服务器在一次TCP连接中发送和接收多个HTTP请求/响应,减少重复建立连接的开销。以下是PHP中实现长连接的几种方式:
配置HTTP服务器支持Keep-Alive
在Apache或Nginx中启用Keep-Alive功能:
Apache配置(httpd.conf或.htaccess):

KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 15
Nginx配置(nginx.conf):
keepalive_timeout 65;
keepalive_requests 100;
PHP脚本中手动控制连接
通过设置HTTP响应头显式启用Keep-Alive:

header('Connection: keep-alive');
header('Keep-Alive: timeout=15, max=100');
使用WebSocket实现持久连接
对于需要双向实时通信的场景,WebSocket比HTTP长连接更高效:
服务端代码示例(使用Ratchet库):
use Ratchet\Server\IoServer;
use Ratchet\Http\HttpServer;
use Ratchet\WebSocket\WsServer;
$server = IoServer::factory(
new HttpServer(new WsServer(new YourWebSocketHandler())),
8080
);
$server->run();
数据库长连接配置
PHP与MySQL的长连接通过pconnect实现:
$link = mysql_pconnect('host', 'user', 'password');
// 或使用PDO
$pdo = new PDO(
'mysql:host=host;dbname=db',
'user',
'password',
[PDO::ATTR_PERSISTENT => true]
);
长连接注意事项
- 资源占用:长连接会持续占用服务器资源,需合理设置超时时间。
- 并发限制:高并发场景可能需要调整服务器配置(如
MaxClients)。 - WebSocket兼容性:需确保客户端浏览器支持WebSocket协议。
性能优化建议
- 结合OPcache提升PHP脚本执行效率
- 使用连接池管理数据库长连接
- 监控服务器资源使用情况,避免因长连接导致内存泄漏
通过上述方法,可以在PHP中有效实现长连接功能,根据具体场景选择HTTP Keep-Alive或WebSocket方案。





