zoukankan      html  css  js  c++  java
  • Swoole 理解manager进程和worker进程的启动顺序,以及演示如何停止或者重启服务端。

     测试的代码主要功能:开启一个tcp服务器。然后设置了管理进程和工作进程start的回调进行更名。设置了pid_file保存了服务端启动的mast进程。

    <?php
    //创建Server对象,监听 127.0.0.1:9501端口
    $serv = new swoole_server("127.0.0.1", 9501);
    $serv->set(array(
        'max_request ' => 10, //reactor thread num
        'worker_num' => 4,    //worker process num
        'log_file' => 'swoole.log',
        'pid_file' => 'server.pid',
    ));
    
    
    
    $serv->on('managerStart',function($serv){
        swoole_set_process_name("managerprocess");
    });
    
    $serv->on('workerStart',function($serv, $worker_id){
        if($worker_id >= $serv->setting['worker_num']) {
            swoole_set_process_name("workprocess_".($worker_id-$serv->setting['worker_num']));
        } else {
            swoole_set_process_name("workprocess_{$worker_id}");
        }
    });
    $serv->on('start',function($serv){
        echo "到这一步说明服务已经起来了,manager,work都已经回调start完成";
    });
    //监听连接进入事件
    $serv->on('connect', function ($serv, $fd) {  
        echo "Client: Connect.
    ";
    });
    
    //监听数据接收事件
    $serv->on('receive', function ($serv, $fd, $from_id, $data) {
        $serv->send($fd, "Server: ".$data);
    });
    
    //监听连接关闭事件
    $serv->on('close', function ($serv, $fd) {
        echo "Client: Close.
    ";
    });
    
    //启动服务器
    $serv->start(); 

    开启服务器后

    查看进程,在server->start 后,拉起workNum+2(master,manager进程)。

    然后查看pid_file里的master进程id是否是1827,上图所示。结果显然是一致的

    下面写一个脚本去重启和停止服务端。(原理就是给mast进程发送信号)

    <?php
        $options  = 's';
        $command = getopt($options);
        $pidFile = 'server.pid';
        if(isset($command['s'])){
            if($command['s']=='stop'){
                stop();
            }else{
                reload();
            }
        }else{
            die("请输入-s stop|reload");
        }
    
        function stop(){
            global $pidFile;
            if (file_exists($pidFile)) {
                $pid = file_get_contents($pidFile);
    
                if (!swoole_process::kill($pid, 0)) {
                    echo "PID :{$pid} not exist 
    ";
                    return false;
                }
                swoole_process::kill($pid);
                //等待5秒
                $time = time();
                $flag = false;
                while (true) {
                    usleep(1000);
                    if (!swoole_process::kill($pid, 0)) {
                        echo "server stop at " . date("y-m-d h:i:s") . "
    ";
                        if (is_file($pidFile)) {
                            unlink($pidFile);
                        }
                        $flag = true;
                        break;
                    } else {
                        if (time() - $time > 5) {
                            echo "stop server fail.try again 
    ";
                            break;
                        }
                    }
                }
                return $flag;
            } else {
                echo "pid 文件不存在,请执行查找主进程pid,kill!
    ";
                return false;
            }
        }
    
        function reload(){
            global $pidFile;
            if (file_exists($pidFile)) {
                $sig = SIGUSR1;
                $pid = file_get_contents($pidFile);
                if (!swoole_process::kill($pid, 0)) {
                    echo "pid :{$pid} not exist 
    ";
                    return;
                }
                swoole_process::kill($pid, $sig);
                echo "send server reload command at " . date("y-m-d h:i:s") . "
    ";
            } else {
                echo "pid 文件不存在,请执行查找主进程pid,kill!
    ";
            }
        }

    先执行重启

    再查看进程

    主进程还是1827,但是工作进程就被reload的了。

    然后执行退出

    查看进程确实不见了

  • 相关阅读:
    V2热帖:要多健壮的代码才能支撑起千变万化的需求?
    jmeter生成html报告的命令
    jmeter5.x&4.x搭配使用Serveragent 监听服务端性能参数
    springboot关于tomcat的几个默认配置
    nginx日志统计分析-shell
    OpenStack虚拟机VIP配置步骤
    openstack 3.14.3 虚拟机增加指定IP网卡
    OpenStack各组件的常用命令
    Filebeat的Registry文件解读
    一个shell脚本的实践
  • 原文地址:https://www.cnblogs.com/gavinjunftd/p/9520144.html
Copyright © 2011-2022 走看看