swoole支持热启动

jopen 5年前

所谓热重启,就是当服务器相关代码有所变动之后,无需停止服务,而是在服务器仍然运行的状态下更新文件。Swoole通过内置的reload函数以及两个自定义信号量实现了这一功能。 首先我讲解一下Swoole可用的三个信号:SIGTERM,SIGUSR1,SIGUSR2。SIGTERM用于停止服务器,SIGUSR1用于重启全部的Worker进程,SIGUSR2用于重启全部的Task Worker进程。 那要如何实现热更新代码文件呢?Swoole的回调函数中有这个一个回调 onWorkerStart ;该回调会在Worker进程启动时被调用。因此,当swoole_server收到SIGUSR1信号并重启全部Worker进程后,onWorkerStart就会被调用。如果在onWorkerStart中require全部的代码文件,每次onWorkerStart后都会重新require一次php文件,这样就能实现代码文件的热更新。 来看下代码实现:

public function onStart( $serv ) {      cli_set_process_title("reload_master");  }    public function onWorkerStart( $serv , $worker_id) {      require_once "reload_page.php";      Test(); // reload_page.php中定义的一个函数  }

首先,在 onStart 回调函数中通过php的cli_set_process_title函数设置进程名。 在 onWorkerStart 中,require相关的php文件。 然后,新建一个reload.sh文件,输入如下内容:

echo "Reloading..."  cmd=$(pidof reload_master)    kill -USR1 "$cmd"  echo "Reloaded"

这样,就可以通过执行这个脚本重启服务器了。 点此查看完整源码

来自: http://blog.41ms.com/post/52.html