Home >Backend Development >PHP Tutorial >swoole支持热启动

swoole支持热启动

WBOY
WBOYOriginal
2016-06-23 13:20:032119browse

所谓热重启,就是当服务器相关代码有所变动之后,无需停止服务,而是在服务器仍然运行的状态下更新文件。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"

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

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn