定时器send不能销毁问题

netslang

$timer = new Timer();
//判断是否存在定时器如存在删除上一个定时器
if($hotel_price) $timer->del($hotel_price);

$hotel_price = $timer->add('2',function()use($connection,$data){
$connection->send('{"type":"login","msg":"测试测试"}');
});

1516 1 0
1个回答

six
if($hotel_price) $timer->del($hotel_price);

$hotel_price哪里来的变量?这时候$hotel_price还没定义呢。

改成

if (isset($connection->hotel_price)) {
    Timer::del($connection->hotel_price);
}
$connection->hotel_price = Timer::add('2',function()use($connection,$data){
    $connection->send('{"type":"login","msg":"测试测试"}');
});

把定时器id存在connection对象的属性里,这样就可以知道每个连接的定时器id,就可以删除了。

另外定时器是静态类,按照手册应该是静态调用,用法是 Timer::add() Timer::del()

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