zoukankan      html  css  js  c++  java
  • 守护进程、信号和平滑重启

    守护进程

    swoole官方也为我们提供了配置选项daemonize(默认未启用),若要开启守护进程,daemonize设置为true即可,这样就可以不受终端控制,在后台运行。
    配置为守护进程后,所有的标准输出将失效,如果要调试,可以配置log_file,所有的标准输出统统记载到该文件中。

    平滑重启

    swoole是常驻内存的,若想让修改后的代码生效,就必须Ctrl+C,然后再重启server。对于守护进程化的server呢?则需kill掉后,再重启。
    事实上,swoole进程刚好处理了一半的数据,此时被kill,就特别容易出现问题。
    swoole为我们提供了平滑重启机制,我们只需要向swoole_server的主进程发送特定的信号,即可完成对server的重启。

    平滑重启包含的信号

    1. SIGTERM,一种优雅的终止信号,会待进程执行完当前程序之后中断,而不是直接干掉进程

    2. SIGUSR1,将平稳的重启所有的Worker进程

    3. SIGUSR2,将平稳的重启所有的Task进程

    pstree | grep server_process #找出主进程
    kill -TERM 55559 #优雅终止主进程
    kill -USR1 55559 #热重启worker进程,onWorkerStart回调之后加载的文件,重启才有意义
    kill -USR2 55559 #热重启task进程,onTask回调之后加载的文件,重启才有意义
    

    要加载的文件 (Person.php)

    ~~~
    class Person
    {
        public $name = '';
        public function __toString(){
            return "~~___".$this->name."___";
        }
    }
    ~~~
    

    server 热重启代码

    ~~~
    $serv = new swoole_server('127.0.0.1', 9501);
    
    // 配置为守护进程方式,以及log调试日志
    $serv->set([
        'worker_num' => 1,
        'daemonize' => true,
        'log_file' => __DIR__ . '/server.log',
    ]);
    
    $serv->on('Connect', function ($serv, $fd) {
        echo "new client connected." . PHP_EOL;
    });
    
    $serv->on('Receive', function ($serv, $fd, $fromId, $data) {
        echo "worker received data: {$data} from ". PHP_EOL;
    });
    
    $serv->on('WorkerStart', function ($serv, $workerId) {    
        //onWorkerStart之后加载的文件,如果该文件有改动,则可以热重启
        require_once ('Person.php');
        $p = new Person();
        $p->name = 'wangkun';
        echo $p;
    });
    
    $serv->start();
    ~~~

  • 相关阅读:
    计算机程序的构造和解释 1.21 寻找素数因子
    迭代法对数计算B的N次方 SICP 计算机程序的构造和解释 1.16
    斐波那契算法的对数解法 计算机程序的构造和解释 习题1.19
    MS SQL SERVER数据库简单回顾
    SICP~计算机程序的构造和解释~ 1.12 c++实现
    论5级流水32bit risc cpu设计
    mdk编译器起到的boot作用详解
    处理器boot的简单概念及误区
    搬砖两年感受
    操作系统方面的两本好书
  • 原文地址:https://www.cnblogs.com/lxwphp/p/15452914.html
Copyright © 2011-2022 走看看