webman插件地址:https://www.workerman.net/plugin/64
composer require webman/event
订阅事件统一通过文件config/event.php来配置
<?php
return [
'user.register' => [
[app\event\User::class, 'register'],
// ...其它事件处理函数...
]
];
我参考官方admin的reloadWebman 重启代码
public static function reloadWebman()
{
if (function_exists('posix_kill')) {
try {
posix_kill(posix_getppid(), SIGUSR1);
return true;
} catch (Throwable $e) {}
} else {
Timer::add(1, function () {
Worker::stopAll();
});
}
return false;
}
测试了终端显示:Workerman[webman] reloading
发布事件后拿到的返回数据还是修改之前的
Event::emit("user.register", $data);
必须要stop 停止webman 后 重新启动 才能同步
求解如何才能修改文件后,自动更新这个文件里面的内容啊
相当重要啊 没有大佬吗
把webman stop停止,执行
ps aux
看下是还有进程在运行,可能有其它地方启动了webman没停止。app\event\User::class 如果在创建子进程前就加载了,那就不支持reload。
看下app\event\User::class类是不是在哪里提前使用了。
原因
'user.register' => [
[app\event\User::class, 'register'],
],
其中的:app\event\User::class 问题
由于我的这个是遍历目录所有文件进行动态添加的
$path = app\event\User;
$class = get_class($path);
最终:
'user.register' => [
[$class, 'register'],
],
我是这样的所以它没法自动刷新,老大请问一下app\event\User::class 这个动态的写法该怎么写啊
$reflectionClass = new ReflectionClass($path );
$fullyQualifiedName = $reflectionClass->getName();
这样也不行 get_class 就好像把文件占用了一样不会二次加载
解决了 直接给路径就行了,不需要::class