在Swoole的onWorkerStart中预加载业务代码可提升性能,需引入Composer自动加载、初始化共享资源、加载配置并注意进程隔离。

在 Swoole 的 onWorkerStart 回调中预加载业务代码,是为了让每个 Worker 进程在启动时就加载好所需的类、配置或连接,避免每次请求都重复初始化,从而提升性能。以下是具体实现方式和注意事项。
Swoole 不自带类自动加载,需手动引入 Composer 的自动加载或其他 autoload 机制。
示例:
假设项目使用 Composer 管理依赖:
$server->on('WorkerStart', function ($server, $workerId) {
// 引入 Composer 自动加载
require_once __DIR__ . '/vendor/autoload.php';
// 可选:初始化全局服务,如数据库、Redis 等
\App\Services\Db::init(); // 静态方法初始化连接池或单例
});
Worker 启动时可建立数据库连接、缓存客户端等,但注意不能跨进程共享内存(除非使用 Swoole 提供的 Table 或 Channel)。
建议做法:
示例:初始化 Redis 客户端
$server->on('WorkerStart', function ($server, $workerId) {
require_once __DIR__ . '/vendor/autoload.php';
// 每个 Worker 创建自己的 Redis 实例
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$GLOBALS['redis'] = $redis; // 存入全局变量(仅当前进程有效)
});
可在 WorkerStart 中加载配置文件或将服务注册到容器。
示例:
$server->on('WorkerStart', function ($server, $workerId) {
require_once __DIR__ . '/vendor/autoload.php';
// 加载配置
$config = require __DIR__ . '/config.php';
\App\Config::set($config);
// 注册服务容器
\App\Container::register('db', function () {
return new \App\Database();
});
});
避免在 onWorkerStart 中做以下操作:
基本上就这些。只要在 onWorkerStart 正确引入 autoloader 并按需初始化资源,就能高效预加载业务代码。关键是理解每个 Worker 是独立进程,资源需各自管理。
以上就是Swoole怎么在onWorkerStart里预加载业务代码的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号