美文网首页
如何实现一个优雅的 While (true)循环

如何实现一个优雅的 While (true)循环

作者: 骑蚂蚁上高速_jun | 来源:发表于2020-03-20 21:19 被阅读0次

    目标:
    在后台进程中 写一个while(true) 循环, 要求该循环实现
    优雅的停止(不影响业务) 和 重新加载业务代码(不影响现有业务)。

    实现原理:
    通过 linux服务器的信号处理,程序本身通过接收外部信号而对软件代码层的一种机制实现。

    通过 php 实现:

    $run = true; // 循环的标识
    /**
     * 安装 SIGUSR1 信号监听器
     */
    pcntl_signal(SIGUSR1, function ($signo) use(&$run){
    
        if($signo == SIGUSR1){
            echo "重载业务文件 require | include... \n";
        }
    
    });
    
    /**
     * 安装 SIGTERM 信号监听器
     */
    pcntl_signal(SIGTERM , function ($signo) use(&$run){
    
        if ($signo == SIGTERM){
            echo "服务器优雅停止 \n";
            $run = false;
        }
    
    });
    
    while($run){
        /**
         * 异步等待信号并 触发安装的信号
         * 该函数有两个功能,
         * 1.等待接收信号;2.异步触发信号
         * 执行顺序, 先1后2
         * 备注说明: 只有在实现第一步接收到信号时,才能触发对应的信号
         */
        pcntl_signal_dispatch();// dengda
        sleep(20); // 模拟业务逻辑执行
    
    }
    

    相关文章

      网友评论

          本文标题:如何实现一个优雅的 While (true)循环

          本文链接:https://www.haomeiwen.com/subject/ezusyhtx.html