swoole_version 是唯一可通过 constant() 直接获取的稳定常量;其他如 swoole_daemonize 等并非真实常量,配置项仅存于 $server->setting 数组中,需在 start() 后访问。

SWOOLE_VERSION 是唯一可通过 constant() 直接获取的稳定常量,其他所谓“配置常量”实际并不存在——Swoole 没有提供类似 SWOOLE_WORKER_NUM 或 SWOOLE_DAEMONIZE 这类运行时可读写的配置常量。
为什么不能用 constant('SWOOLE_DAEMONIZE') 获取配置值
Swoole 的配置项(如 daemonize、worker_num)全部通过 Server->set() 或配置数组传入,它们是运行时参数,不是 PHP 编译期定义的常量。
-
SWOOLE_VERSION是真实存在的编译期常量,可用constant('SWOOLE_VERSION')或直接写死字符串读取 -
SWOOLE_EVENT_READ、SWOOLE_ERROR_CONNECTION_CLOSED等属于事件/错误码常量,用于回调判断或错误处理,和配置无关 - 试图
define('SWOOLE_WORKER_NUM', 4)或读取SWOOLE_WORKER_NUM会返回false或触发Warning: Use of undefined constant - 配置值只能从
$server->setting数组中获取,例如$server->setting['worker_num']
$server->setting 是唯一可靠的配置来源
所有生效的配置最终都归集到 $server->setting 这个只读数组里,它在 Server->start() 前完成合并(默认值 + 用户 set() + 配置文件),之后不可修改。
Swoole 6.1.1 是一个专为 PHP 设计的高性能事件驱动并发网络引擎。作为稳定版,它修复了编译时对 zlib 依赖的缺失及 curl 模块的内存安全风险。该版本支持协程、多线程与多进程架构,内置 TCP/HTTP/WebSocket 服务器,能够显著提升 PHP 在微服务、实时通信等场景下的执行效率与并发能力。
- 必须在
start()之后访问才完整,start()前可能缺失部分默认值(如reactor_num未显式设置时为 0) - 值类型不统一:数字型配置(如
worker_num)是int,但pid_file、log_file是string,daemonize是bool - 没有自动类型转换:即使你传
'worker_num' => '4',内部也会转成int,但$server->setting['worker_num']读出来就是int(4) - 注意键名大小写:
worker_num正确,WORKER_NUM或WorkerNum都不存在
常见误用:把错误码当配置常量
开发者容易混淆 SWOOLE_ERROR_* 和配置项,比如以为 SWOOLE_ERROR_BUFFER_OVERFLOW 能控制缓冲区大小——其实它只是错误发生时 $server->getLastError() 返回的整数代码。
-
SWOOLE_ERROR_BUFFER_OVERFLOW值为1007,仅用于条件判断:if ($server->getLastError() === SWOOLE_ERROR_BUFFER_OVERFLOW) { ... } - 真正控制缓冲区的是
buffer_output_size和socket_buffer_size这两个配置项,需通过$server->setting查看 - 所有
SWOOLE_*_FAILED类常量都属于错误反馈范畴,和启动配置无任何映射关系 - 硬编码错误码(如写
1007)不如用常量名,但别指望它能反向推导配置状态
真正需要动态感知配置变更的地方(比如根据 worker_num 决定共享内存大小),必须盯住 $server->setting,而不是搜罗各种 SWOOLE_* 常量——后者绝大多数和配置毫无关系,只是事件标识或错误分类。










