GatewayWorker定时器问题

奔跑的蜗牛

创建定时器 $_SESSION['timer'+变量] = Timer::add(1, function(){});
销毁定时器 Timer::del($_SESSION['timer'+变量]);
请问多进程会不会出现timer1定时器在A进程,B进程无法清除报错,或者timer1定时器在C进程,D进程无法清除

1071 1 1
1个回答

six

  • 奔跑的蜗牛 2022-06-24

    那这个要怎么解决呢,指定一个进程运行么

  • six 2022-06-24

    每个进程只创建一个定时器,这个定时器定时处理当前进程的所有数据

  • 奔跑的蜗牛 2022-06-24

    可能我没描述清楚,代码如下,这个会存在多进程无法清除定时器的问题么
    public static function onMessage($client_id, $message)
    {
    // 客户端传递的是json数据
    $message_data = json_decode($message, true);
    if(!$message_data)
    {
    return ;
    }
    // 根据类型执行不同的业务
    switch($message_data['type'])
    {
    case 'login':
    $_SESSION['timer'+变量] = Timer::add(1, function(){});
    return;
    case 'logout'
    Timer::del($_SESSION['timer'+变量]);
    return;
    }

  • walkor 2022-06-24

    gateway默认的路由应该是将同一个客户端的请求都转发到同一个业务进程,所以都是在同一个进程操作的定时器,应该没问题

年代过于久远,无法发表回答
×
🔝