首页
下载
文档
社区
视频
捐赠
源代码
赞助商
AOT 编译器
AI 助理
商业产品
PHP AOT 原生编译器
Swoole-Compiler 代码加密器
CRMEB 新零售社交电商系统
登录
注册
全部
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
发表新帖
超过max_request自动重启时感觉onRequest比onWorkerStart先运行
### 问题描述 并发请求的时候,开始正常,在Worker接收请求超过max_request自动重启时感觉onRequest比onWorkerStart先运行,会出现在onWorkerStart里加载的类在onRequest里运行时出现“Class 'Tnci' not found”并退出程序,设置max_request比较小时可以复现。 ### Swoole版本,PHP版本,以及操作系统版本信息 Swoole:4.7.0,PHP版本:PHP 7.2.24-0ubuntu0.18.04.10 (cli) (built: Oct 25 2021 17:47:59) ( NTS ) ### 相关代码 ```php /** * 处理进程启动时初始化 */ public static function onWorkerStart() { /**********加载常用或必用类-开始**********/ require __DIR__ . "/Util/Conf.class.php";//加载配置类 require __DIR__ . "/Util/Com.class.php";//公共方法类 require __DIR__ . "/Action.class.php";//Action类 require __DIR__ . "/Mysql.class.php";//Mysql类 require __DIR__ . "/Db/Mysql.class.php";//Mysql类 require __DIR__ . "/Cache/Redis.class.php";//Redis缓存类 /**********加载常用或必用类-结束**********/ require __DIR__ . '/Tnci.class.php'; register_shutdown_function( array( Tnci::class, 'httpShutdown' ) );//异常退出时处理 Tnci::initServer();// //加载常用配置 UtilConf::get( 'default' ); UtilConf::get( 'db' ); UtilConf::get( 'cache' ); UtilConf::get( 'area' ); } ``` ### 你期待的结果是什么?实际看到的错误信息又是什么? 正常运行
发布于3年前 · 29 次浏览 · 来自
提问
阿宽
### 问题描述 并发请求的时候,开始正常,在Worker接收请求超过max_request自动重启时感觉onRequest比onWorkerStart先运行,会出现在onWorkerStart里加载的类在onRequest里运行时出现“Class 'Tnci' not found”并退出程序,设置max_request比较小时可以复现。 ### Swoole版本,PHP版本,以及操作系统版本信息 Swoole:4.7.0,PHP版本:PHP 7.2.24-0ubuntu0.18.04.10 (cli) (built: Oct 25 2021 17:47:59) ( NTS ) ### 相关代码 ```php /** * 处理进程启动时初始化 */ public static function onWorkerStart() { /**********加载常用或必用类-开始**********/ require __DIR__ . "/Util/Conf.class.php";//加载配置类 require __DIR__ . "/Util/Com.class.php";//公共方法类 require __DIR__ . "/Action.class.php";//Action类 require __DIR__ . "/Mysql.class.php";//Mysql类 require __DIR__ . "/Db/Mysql.class.php";//Mysql类 require __DIR__ . "/Cache/Redis.class.php";//Redis缓存类 /**********加载常用或必用类-结束**********/ require __DIR__ . '/Tnci.class.php'; register_shutdown_function( array( Tnci::class, 'httpShutdown' ) );//异常退出时处理 Tnci::initServer();// //加载常用配置 UtilConf::get( 'default' ); UtilConf::get( 'db' ); UtilConf::get( 'cache' ); UtilConf::get( 'area' ); } ``` ### 你期待的结果是什么?实际看到的错误信息又是什么? 正常运行
赞
0
收藏
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
登录
后参与评论
评论
2023-03-25
Rango
如果 `onWorkerStart` 中有协程挂起,有可能 `onRequest` 会先执行。 实例 ---- ```php public static function onWorkerStart() { Co::sleep(1); require __DIR__ . '/Tnci.class.php'; echo "1\n"; } public static function onRequest() { echo "2\n"; } ``` 解释 ---- 当 `onWorkerStart` 中执行了 `Co::sleep()` 会挂起当前协程,若有新的请求进来,会先执行 `onRequset` ,输出的结果为: ```shell 2 1 ```
赞
0
回复
2023-04-08
13027******
回复
Rango
这种情况如何避免呢
赞
0
回复
2023-04-08
Rango
回复
13027******
可以使用 `Coroutine\Server` 或者使用 `Channel` 管理协程调度
赞
0
回复
2023-04-03
阿宽
好的
赞
0
回复