easyswoole 启动必须使用 start.php 入口并调用 core::run(),不支持直接执行任意 php 脚本;自定义逻辑需注册到生命周期事件,临时调试可用 develop 模式,一次性任务应通过 php easyswoole task 命令运行。

EasySwoole 启动脚本必须是 start.php 入口文件
EasySwoole 不支持直接用 php your_script.php 运行任意 PHP 脚本,它要求所有服务启动必须走框架约定的入口流程。如果你写了个普通 PHP 脚本想“塞进” EasySwoole 里跑,得先把它注册成命令行任务或服务控制器,而不是直接执行。
常见错误现象:PHP Fatal error: Class 'EasySwoole\EasySwoole\Core' not found 或进程启动后立刻退出——本质是没走框架初始化流程,自动加载、事件循环、协程环境全都没准备好。
- 入口文件必须是项目根目录下的
start.php(默认),且内容应调用EasySwoole\EasySwoole\Core::run() - 自定义逻辑不能放在
start.php顶层作用域,要注册到mainServerCreate、onWorkerStart等生命周期事件中 - 如果只是想临时跑一段代码验证逻辑,可用
php easyswoole start develop启动开发模式,再在initialize方法里加调试逻辑
想运行一次性脚本?用 php easyswoole task 命令
EasySwoole 自带命令行工具 easyswoole,支持运行独立任务而不启动 HTTP/WS 服务。适合定时任务、数据迁移、批量处理等场景。
使用前提:你的脚本得继承 EasySwoole\Task\TaskInterface,并在 task 目录下注册;或者更简单——直接写个符合规范的命令行类,放进 App\Command 并注册到 CommandRunner。
- 新建命令类如
App\Command\MyScript,实现commandName()和run()方法 - 在
EasySwooleEvent::initialize()中调用CommandRunner::getInstance()->addCommand(new MyScript()) - 执行:
php easyswoole myScript --arg1=value1,参数通过$args获取 - 注意:命令行模式下协程默认不启用,需手动调用
Co::set(['hook_flags' => SWOOLE_HOOK_ALL])才能用Co::sleep()等
require_once 普通 PHP 文件会出问题
在 EasySwoole 的 Worker 进程里直接 require_once 'xxx.php' 很危险。框架会 fork 多个 Worker,而 require_once 是进程级缓存——不同 Worker 可能加载不同版本,或因全局变量污染导致行为不一致。
典型表现:脚本第一次运行正常,重启服务后报 Class not found 或函数重复定义;高并发下偶尔失败,难以复现。
- 统一用 Composer autoloader 加载业务类,确保 PSR-4 规范(如
App\Utility\MyHelper对应app/Utility/MyHelper.php) - 配置文件、常量定义建议放
Config目录,并通过EasySwoole\Config单例访问,避免多进程间状态错乱 - 真要动态加载 PHP 文件(比如插件机制),改用
include+md5_file()校验,且确保文件无副作用(不执行顶层语句、不定义全局函数)
协程环境下不能用 sleep()、file_get_contents() 等同步阻塞函数
EasySwoole 默认开启协程,但很多老式 PHP 函数仍是同步阻塞的。直接在 onRequest 或 onMessage 回调里调用,会导致整个 Worker 进程卡住,吞吐暴跌。
错误示例:sleep(2) 会让该 Worker 在 2 秒内无法处理任何其他请求;file_get_contents('http://api.com') 会阻塞直到响应返回。
- 替代
sleep():用Co::sleep(2) - 替代
file_get_contents()(HTTP):用Co\Http\Client或Swoole\Coroutine\Http\Client - 替代
mysqli_query():用EasySwoole\Mysqli\Client或Co\Mysql - 不确定某个函数是否协程安全?查文档看是否标注 “Coroutine Safe”,或在
Co::create里试跑并观察 CPU 占用是否异常飙升
协程不是万能胶水,它改变的是调度方式,不是语法糖。写法没变,但底层行为完全不同——这点最容易被忽略,也是线上性能问题最常藏身的地方。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











