Gateway中想使用Timer,请问Timer该从哪里开始调用?

osacar

在chat中想加一个timer来定时执行一些业务。
请问从Event.php里哪个入口开始执行好?
从onWorkerStart这里么?

3646 6 0
6个回答

latin

我觉得如果不知道在那里加,那就在onWorkerStart里面加就好

  • 暂无评论
damao

如果要给每个client_id设置一个定时器,那就是在onConnect或者onMessage入口设置。
如果是全局的定时器,就在onWorkerStart里面设置

  • 暂无评论
walkor

@latin @damao 赞

  • 暂无评论
osacar

@damao @walkor
那我是应该start_businessworker.php里添加么?还是加在Event.php里?

use \Workerman\Worker;
use \GatewayWorker\BusinessWorker;
use \Workerman\Autoloader;

// 自动加载类
require_once __DIR__ . '/../../Workerman/Autoloader.php';
Autoloader::setRootPath(__DIR__);

// bussinessWorker 进程
$worker = new BusinessWorker();
// worker名称
$worker->name = 'ChatBusinessWorker';
// bussinessWorker进程数量
$worker->count = 4;
// 服务注册地址
$worker->registerAddress = '127.0.0.1:1236';

//定时器
$worker->onWorkerStart = function($task)
{
    // 每2.5秒执行一次
    $time_interval = 2.5;
    Timer::add($time_interval, function()
    {
        echo "task run\n";
    });
};

// 如果不是在根目录启动,则运行runAll方法
if(!defined('GLOBAL_START'))
{
    Worker::runAll();
}
  • 暂无评论
walkor

都可以

  • 暂无评论
osacar

@walkor

如果是在Event.php里添加的话,是不是参照里面的onMessage()方法来添加,看到里面的都是静态方法。
public static function onWorkerStart(){
// 每2.5秒执行一次
$time_interval = 2.5;
Timer::add($time_interval, function()
{
echo "task run\n";
});
}
请问是不是如上代码?多谢指正。

  • 暂无评论
年代过于久远,无法发表回答
🔝