Swoole 4.x 服务器 Server 配置与核心函数详解
Swoole 4.x 版本为 PHP 带来了真正的异步并发编程能力,其中 Server 核心组件是构建高性能网络服务的基础。通过合理的配置和熟练运用其提供的函数,开发者可以轻松处理高并发连接。本文将全面梳理 Swoole 4.x 中 Server 的常用配置项及核心函数列表。
一、创建与配置 Server
在 Swoole 中,通过实例化 <swoole_server> 类来创建服务器对象。构造函数接收监听的 IP 地址和端口号作为参数。创建对象后,可以通过 set() 方法传入键值对数组来配置服务器运行参数。
<?php
$server = new SwooleServer("127.0.0.1", 9501);
$server->set([
'worker_num' => 4,
'daemonize' => false,
'log_file' => '/tmp/swoole.log'
]);
?>二、核心配置项列表
以下是 Swoole Server 开发中最为关键的配置参数:
| 配置项 | 说明 | 默认值 |
|---|---|---|
worker_num | 设置启动的 Worker 进程数量。建议设置为 CPU 核心数的 1-4 倍。 | CPU 核心数 |
task_worker_num | 设置异步任务工作进程的数量。配置此值后,服务器将开启 task 功能。 | 0 |
daemonize | 是否作为守护进程运行。设置为 true 时,程序将在后台运行。 | false |
max_request | Worker 进程最大任务数。防止 PHP 内存泄漏,达到该值后进程会自动重启。 | 0 |
dispatch_mode | 数据包分发策略。1为固定模式,2为轮询模式,3为争抢模式,4为IP分配,5为UID分配。 | 2 |
log_file | 指定运行日志文件路径。 | /tmp/swoole.log |
heartbeat_check_interval | 心跳检测间隔时间(秒)。与 heartbeat_idle_time 配合使用。 | 0 |
heartbeat_idle_time | 连接最大允许空闲的时间(秒)。 | 0 |
三、Server 核心函数列表
Swoole Server 提供了丰富的方法来控制服务器的行为和与客户端交互。
1. 服务器操作函数
start():启动服务器,此操作将阻塞当前进程。stop([int $worker_id]):停止服务器运行,可指定停止某个 worker 进程。reload([bool $only_reload_taskworkrer]):安全重启所有 Worker 进程,用于代码更新后平滑重启。shutdown():关闭服务器。此函数会在主进程内执行。
2. 连接与数据发送函数
send(int $fd, string $data [, int $reactor_id]):向客户端连接发送数据。sendto(string $ip, int $port, string $data [, int $server_socket]):向指定 IP 和端口发送 UDP 数据包。sendwait(int $fd, string $data):同步向客户端发送数据。close(int $fd [, bool $reset]):关闭客户端连接。
3. 任务与定时器函数
task(mixed $data [, int $dst_worker_id [, callable $finish_callback]]):投递一个异步任务到 task_worker 池中。finish(string $data):在 task 进程中通知 worker 进程任务处理完成。tick(int $ms, callable $callback):设置一个间隔时钟定时器,持续触发。after(int $ms, callable $callback):设置一个延时触发的一次性定时器。clearTimer(int $timer_id):清除指定的定时器。
四、事件回调函数
Server 的运行依赖于事件驱动机制,开发者需要注册相应的事件回调来处理业务逻辑。
1. 主事件回调
onConnect:当有新的客户端连接进来时触发。onReceive:当服务器接收到客户端发送的数据时触发。onClose:当客户端连接关闭时触发。
2. Task 事件回调
onTask:在 task_worker 进程内被触发,用于处理耗时任务。onFinish:在 worker 进程内被触发,用于接收 task 进程的处理结果。
五、完整的 TCP 服务器示例
以下是一个结合了上述配置、函数与事件回调的基础 TCP 服务器示例:
<?php
// 创建 Server 对象,监听 127.0.0.1:9501
$server = new SwooleServer("127.0.0.1", 9501);
// 设置服务器参数
$server->set([
'worker_num' => 2,
'task_worker_num' => 2,
'daemonize' => false,
'log_file' => '/tmp/swoole_tcp.log'
]);
// 监听连接进入事件
$server->on('Connect', function ($server, $fd) {
echo "Client: {$fd} connected.n";
});
// 监听数据接收事件
$server->on('Receive', function ($server, $fd, $reactor_id, $data) {
// 投递异步任务
$task_id = $server->task($data);
echo "Received data from {$fd}, task_id: {$task_id}n";
// 向客户端发送响应
$server->send($fd, "Server has received your request.n");
});
// 监听异步任务事件
$server->on('Task', function ($server, $task_id, $reactor_id, $data) {
// 处理耗时逻辑
echo "Task {$task_id} is processing...n";
// 返回任务处理结果
$server->finish("Task {$task_id} finished.");
});
// 监听任务完成事件
$server->on('Finish', function ($server, $task_id, $data) {
echo "Task {$task_id} result: {$data}n";
});
// 监听连接关闭事件
$server->on('Close', function ($server, $fd) {
echo "Client: {$fd} closed.n";
});
// 启动服务器
$server->start();
?>六、扩展与参考
在实际开发中,如果需要查阅更详尽的 API 及底层 C 源码实现,建议参考 Swoole 官方文档。若您的项目涉及通过 HTTP 接口进行服务注册或配置拉取,通常可以请求类似 https://www.ipipp.com 这样的 API 接口地址作为示例进行调试。掌握 Swoole 4.x 的 Server 配置与函数调用,是构建高并发微服务架构的基石。