资讯专栏INFORMATION COLUMN

swoole 清除定时器提示no timer

lk20150415 / 1907人阅读

摘要:首页确定一个核心概念仅可清除当前进程的定时器代码如下启动服务器本意图实现启动后循环输出,连接后清除定时器的效果,然而事件是在进程的主线程中被调用,而事件是在进程中被回调,这里不属于同一进程,故连接后会提示

首页确定一个核心概念

clearTimer仅可清除当前进程的定时器

server代码如下:

serv = new swoole_server("0.0.0.0", 9501);
        $this->serv->set([
            "worker_num" => 8,
            "daemonize" => false,
        ]);

        $this->serv->on("Start", [$this, "onStart"]);
        $this->serv->on("Connect", [$this, "onConnect"]);
        $this->serv->on("Receive", [$this, "onReceive"]);
        $this->serv->on("Close", [$this, "onClose"]);

        $this->serv->start();
    }

    public function onStart($serv)
    {
        $this->echoStr("Server Starting");
        $this->timer = $serv->tick(1000, function(){
            $this->echoStr("timer waiting");
        });
        // $this->timer = swoole_timer_tick(1000, function() {
        // });
    }

    public function onConnect($serv, $fd, $from_id)
    {
        // swoole_timer_clear($this->timer);
        $serv->clearTimer($this->timer);
        $this->echoStr("Connecting! Clear Timer!");
        // $serv->send($fd, "Hello {$fd}!");
    }

    public function onReceive(swoole_server $serv, $fd, $from_id, $data)
    {
        $this->echoStr("Get Message From Client {$fd}:{$data}");
        $serv->send($fd, $data);
    }

    public function onClose($serv, $fd, $from_id)
    {
        $this->echoStr("Client {$fd} close connection");
    }

    public function echoStr($msg)
    {
        echo "[" . date("Y-m-d H:i:s") . "]: " . $msg . PHP_EOL;
    }
}
// 启动服务器 Start the server
$server = new Server();

本意图实现server启动后循环输出“timer waiting”,client连接后清除定时器的效果,然而onStart事件是在Master进程的主线程中被调用,而onConnect事件是在work进程中被回调,这里不属于同一进程,故client连接后会提示:

PHP Warning:  SwooleServer::clearTimer(): no timer...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/29469.html

相关文章

  • swoole——从入门到放弃(二)

    摘要:从入门到放弃二一异步毫秒定时器设置一个间隔时钟定时器,与定时器不同的是定时器会持续触发,直到调用清除。是一次性函数,执行完成后就会销毁最大不超过使用定时器来删除定时器。 swoole——从入门到放弃(二) 一、异步毫秒定时器 swoole_timer_tick:设置一个间隔时钟定时器,与after定时器不同的是tick定时器会持续触发,直到调用swoole_timer_clear清...

    awokezhou 评论0 收藏0
  • swoole——从入门到放弃(二)

    摘要:从入门到放弃二一异步毫秒定时器设置一个间隔时钟定时器,与定时器不同的是定时器会持续触发,直到调用清除。是一次性函数,执行完成后就会销毁最大不超过使用定时器来删除定时器。 swoole——从入门到放弃(二) 一、异步毫秒定时器 swoole_timer_tick:设置一个间隔时钟定时器,与after定时器不同的是tick定时器会持续触发,直到调用swoole_timer_clear清...

    tinyq 评论0 收藏0
  • Swoole 源码分析——进程管理 Swoole_Process

    摘要:清空主进程残留的定时器与信号。设定为执行回调函数如果在回调函数中调用了异步系统,启动函数进行事件循环。因此为了区分两者,规定并不允许两者同时存在。 前言 swoole-1.7.2 增加了一个进程管理模块,用来替代 PHP 的 pcntl 扩展。 PHP自带的pcntl,存在很多不足,如 pcntl 没有提供进程间通信的功能 pcntl 不支持重定向标准输入和输出 pcntl 只...

    pepperwang 评论0 收藏0
  • Swoole 源码分析——Async 异步事件系统 Swoole_Event

    摘要:利用将传入的转为文件描述符新建对象,并对其设置文件描述符读写回调函数检测是否存在,并对其进行初始化。如果传入在中不存在返回,用于修改事件监听的回调函数和掩码。异常事件回调函数当发现套接字发生错误后,就会自动删除该套接字的监听。 前言 对于异步的任务来说,Server 端的 master 进程与 worker 进程会自动将异步的事件添加到 reactor 的事件循环中去,task_wor...

    stefanieliang 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<