Swoole 是一个为PHP提供高性能网络通信能力的扩展。它具有以下特点:
- 提供异步、并行、协程等高级特性
- 支持TCP/UDP/HTTP/WebSocket等多种协议
- 可用于开发高性能的Web应用、即时通讯、游戏服务器等
- 显著提升PHP应用程序的并发处理能力
前提条件
- Rocky Linux 8 或更高版本
- PHP 7.2 或更高版本
- root 权限或 sudo 权限
- 已安装 gcc 编译环境
环境准备
Swoole 提供了多种安装方式,可以根据实际需求选择最适合的方式:
- 使用 dnf 安装:最简单快捷的方式,适合快速部署
- 使用 PECL 安装:可以方便地管理 PHP 扩展
- 源码编译安装:提供最大的灵活性,可以自定义编译参数
1. 安装编译工具
# 安装开发工具包
sudo dnf groupinstall "Development Tools" -y
sudo dnf install -y php84-php-pear php84-php-devel brotli-devel # 安装必要的依赖
2. 检查PHP环境
/opt/remi/php84/root/bin/php -v # 检查 PHP 版本
/opt/remi/php84/root/bin/php -i | grep php.ini # 检查 PHP 配置信息
/opt/remi/php84/root/bin/php -m | grep swoole # 检查是否已安装 swoole 扩展
安装 Swoole
1. 使用 dnf 安装
sudo dnf install -y php84-php-pecl-swoole5 # 安装 Swoole
2. 使用 PECL 安装
/opt/remi/php84/root/bin/pecl install swoole # 安装 Swoole
sudo echo "extension=swoole.so" > /etc/opt/remi/php84/php.d/40-swoole.ini # 添加 40-swoole.ini 配置文件
3. 源码编译安装
# 下载Swoole源码
wget https://github.com/swoole/swoole-src/archive/v5.1.5.tar.gz
tar xzf v5.1.5.tar.gz && cd swoole-src-5.1.5/
/opt/remi/php84/root/bin/phpize # 生成 configure 文件
# 配置编译选项
./configure --enable-openssl --enable-sockets --enable-mysqlnd --with-php-config=/opt/remi/php84/root/bin/php-config
make && sudo make install # 编译安装
sudo echo "extension=swoole.so" > /etc/opt/remi/php84/php.d/40-swoole.ini # 添加 40-swoole.ini 配置文件
验证安装
1. 检查 Swoole 是否安装成功
# 检查 Swoole 扩展
/opt/remi/php84/root/bin/php -m | grep swoole
# 查看 Swoole 扩展信息
/opt/remi/php84/root/bin/php --ri swoole
2. 测试 Swoole 功能
创建测试文件 server.php
:
<?php
$server = new Swoole\HTTP\Server("127.0.0.1", 9501);
$server->on("start", function ($server) {
echo "Swoole http server is started at http://127.0.0.1:9501\n";
});
$server->on("request", function ($request, $response) {
$response->header("Content-Type", "text/plain");
$response->end("Hello World\n");
});
$server->start();
运行测试服务器:
/opt/remi/php84/root/bin/php server.php
Swoole 配置优化
为了获得最佳性能,需要对 Swoole 进行合理的配置。
以下配置参数可以根据服务器硬件资源和实际业务需求进行调整:
编辑 /etc/opt/remi/php84/php.d/40-swoole.ini
:
[swoole]
swoole.use_shortname = On
swoole.display_errors = On
swoole.unixsock_buffer_size = 8M
# 进程配置
swoole.worker_num = 4
swoole.max_request = 10000
swoole.task_worker_num = 4
# 日志配置
swoole.log_level = 0
swoole.log_file = /var/log/swoole.log