守护进程、信号和平滑重启[通俗易懂]

守护进程、信号和平滑重启

大家好,又见面了,我是全栈君。

守护进程

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();
~~~

守护进程、信号和平滑重启[通俗易懂]

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/111877.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • RTSP协议

    RTSP协议1、RTSP简介RTSP(RealTimeStreamingProtocol)是由RealNetwork和Netscape共同提出的如何有效地在IP网络上传输流媒体的应用层协议。RTSP对流

    2022年7月2日
    36
  • 【STM32】STM32CubeMX教程二–基本使用(新建工程点亮LED灯)

    【STM32】STM32CubeMX教程二–基本使用(新建工程点亮LED灯)前言在配置好CubeMX之后,就是新建工程的开始了,那么首先我们需要一些准备,本片博客我们会很详细的介绍STM32CubeMx的基本使用和如何创建一个新的工程并且点亮LED灯面向初学者如果您想着快速实现工程的创建,可以直接跳过功能介绍,观看工程创建一栏并且,在新建工程时,我们分为了具体流程1~7如果您不想看每部分的讲解,直接按照流程操作即可,5分钟即可成功点亮LED灯安装…

    2022年6月14日
    48
  • 教你如何免费将XPS转换为PDF格式

    教你如何免费将XPS转换为PDF格式XPS文件在我们日常工作中使用比较少,大部分时候我们都会将它转换成PDF格式后进行修改或保存等操作,不懂这种文档要怎么打开?其实这些都不重要,只要你知道PDF就可以,教你几种将XPS转成PDF的方法,还有免费使用哦。1、另存文档目前很多PDF软件都可以直接打开XPS文件,这里我们推荐使用极速PDF阅读器打开XPS文档,然后将文档另存为PDF格式就可以了,这个方式是不是超级简单实用。2、在线转换只需要电脑打开百度浏览器搜索speedpdf找到并打开这款在线免费转换工具,选择XPS转PD

    2022年6月4日
    46
  • 什么是WPF_windows程序设计教程

    什么是WPF_windows程序设计教程windows的消息具有以下两个参数:(1)字参数(wParam)(2)长参数(lParam)  字参数和长参数都是32位整数,用于提供消息的附带消息,是消息传递过程中参数的载体。附加信息的消息号取决于消息号。一、wParam和lParam消息 :部分说明需要查看MSDN例如:1 WM_PAINT消息,LOWORD(lParam)是客户区的宽,HIWORD(lParam)是客户区的高。…

    2022年8月18日
    5
  • linux(9)find命令详解「建议收藏」

    linux(9)find命令详解「建议收藏」find命令格式:findpath-option[-print][-exec-okcommand]{}\;find命令的参数:path:要查找的目录路径。~表示$HO

    2022年7月31日
    3
  • 深入浅出python第二版PDF_python数据分析

    深入浅出python第二版PDF_python数据分析内容介绍热点排行相关文章下载地址↓中文名:深入浅出Python原名:深入浅出Python作者:巴里图书分类:网络资源格式:PDF版本:扫描版出版社:东南大学出版社书号:9787564126759发行时间:2011年5月地区:英国语言:英文简介:内容简介:你是否想过通过一本书来学习Python?《深入浅出Python))通过一种独特的超越语法手册的方式来帮助你学习Python。…

    2022年10月17日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号