定时器中的逻辑代码修改后,执行reload后新代码不生效

猴子

新建一个定时器,修改部分代码
之后php start.php reload定时器
新修改的部分代码不生效

<?php
use \Workerman\Worker;
use \Workerman\Lib\Timer;
require_once './Workerman/Autoloader.php';

$task = new Worker();
// 开启多少个进程运行定时任务,注意多进程并发问题
$task->count = 1;
$task->name = "TimerWorker";
$task->reloadable = true;
$task->onWorkerStart = function ($task) {
    Timer::add(1, function () {
        logLib::out("timerfdsa");
    });
};

// 运行worker
if(!defined('GLOBAL_START'))
{
    Worker::runAll();
}

我无论怎么修改logLib::out("timerfdsa");都不生效,除非是执行php start.php restart

阅读 2611
5个回答

walkor

手册有说明,只有在onXX载入的文件才能reload(或者说Worker::runAll() 运行后载入的文件才能reload)。主进程写死的代码无法reload。

  • 暂无评论
猴子

恩,那我现在需要怎么处理这部分逻辑。可以让我的定时器代码reload的时候可以生效。每次重启服务器端很伤人啊

  • 暂无评论
猴子
<?php
use \Workerman\Worker;
use \Workerman\Lib\Timer;
require_once './Workerman/Autoloader.php';

$task = new Worker();
// 开启多少个进程运行定时任务,注意多进程并发问题
$task->count = 1;
$task->name = "TimerWorker";
$task->reloadable = true;

$task->onWorkerStart = function ($task) {
    logLib::out("onWorkerStart!");
    Timer::add(1, function () {
        logLib::out("testfdas!!!");
    });
};
// 运行worker
if(!defined('GLOBAL_START'))
{
    Worker::runAll();
}

完整的测试代码。文件名start_timer.php
上面这段代码,LogLib::out部分怎么修改,reload后都不生效

  • 暂无评论
walkor

首先:定时器函数写到单独文件

通过自动加载机制加载这个单独文件。
如果不懂自动加载就在onWorkerStart中require进来。

  • 暂无评论
猴子

太感谢了。可以了

  • 暂无评论