【已解决】GatewayWork 定时器里面给用户发送倒计时时间

xiaomingonce
//{"type": "to_msg","data": {"id": 2,"msg": "你在家吗"}}
public static function onMessage($client_id, $data)
{
    $result = json_decode($data, true);
    switch ($result['type']) {

        case 'game':

            if (isset($_SESSION['time_start'])) {
                return;
            }
            $count = 60;
            $gate = new Gateway();
            $_SESSION['time_start'] = $time_id = Timer::add(1, function () use (&$time_id, &$count, &$client_id, &$gate) {
                $a = $count--;

                //这里可以输出在控制台
                print_r($a . PHP_EOL);
                //推送用户不成功
                $gate->sendtoCurrentClient($a);

                // 运行10次后销毁当前定时器
                if ($a < 1) {
                    Timer::del($time_id);
                }
            });
            break;
        default:
            Gateway::sendtoCurrentClient("其余功能未开放");
            break;
    }
}

public static function onClose($client_id)
{
    if (isset($_SESSION['time_start'])) {
        Timer::del($_SESSION['time_start']);
    }
}

}

解决办法使用sendToClient

public static function onMessage($client_id, $data)
{
    $result = json_decode($data, true);
    switch ($result['type']) {
        case 'game':

            if (isset($_SESSION['time_start'])) {
                return;
            }

            $count = 60;
            $_SESSION['time_start'] = $time_id = Timer::add(1, function () use (&$time_id, &$count,$client_id) {
                $a = $count--;
                // 运行10次后销毁当前定时器
                if ($a < 1) {
                    Timer::del($time_id);
                }

                //使用sendToClient成功推送
                Gateway::sendToClient($client_id, $a);

            });

            break;
    }
}
380 1 0
1个回答

不败少龙

1秒推送一次数据

  • xiaomingonce 2023-10-25

    对,我想要给用户推送倒计时,现在控制台可以输出,但是长连接用户那边接收不到

  • 不败少龙 2023-10-25

    那你直接全部推送 先不做单用户的推送

  • xiaomingonce 2023-10-25

    可以了。感谢回答

🔝