php中Swoole的热更新实现代码实例

时间:2021-05-26

使用swoole_http_server替代php-fpm后,由于php长驻内存,修改了代码不能实时调试,需要去手动去重启服务,很是不方便,决定使用inotify来监控文件状态的改变,来给swoole发送reload信号,来实现swoole的热更新。

如何安装inotify就不写了,安装之后可以建立一个脚本文件,如php_reload.sh:

#!/bin/sh# src 需要监控的地址src=/home/server/Project/test/app//usr/bin/inotifywait -rmq -e create,modify,delete $src | while read event do /home/server/Project/test/bin/httpserver reload done

linux shell 写swoole重启脚本

代码如下

#!/bin/shkill `lsof -t -i:9501`sleep 2php /data/web/mircoweb/wwwroot/Public/swoole.phpsleep 1netstat -ntlp

如果不支持lsof命令 那就yum install lsof安装下吧

swoole服务平滑重启

1. reload.sh脚本

echo "loading..."pid="pidof live_name"echo $pidkill -USR1 $pidecho "loading success"

2. linux中执行

sh  reload.sh
代码用的原来只是自己加了一些操作流程

swoole_reload_server.php

<?phpclass Server{        private $serv;        public function __construct() {        $this->serv = new swoole_server("0.0.0.0", 9501);        $this->serv->set(array(            'worker_num' => 8,            'daemonize' => false,            'max_request' => 10000,            'dispatch_mode' => 2,            'debug_mode'=> 1,        ));        $this->serv->on('Start', array($this, 'onStart'));        $this->serv->on('WorkerStart', array($this, 'onWorkerStart'));        $this->serv->on('Connect', array($this, 'onConnect'));        $this->serv->on('Receive', array($this, 'onReceive'));        $this->serv->on('Close', array($this, 'onClose'));        $this->serv->start();    }    public function onStart( $serv ) {        echo "Start\n";        cli_set_process_title("reload_master");    }    public function onWorkerStart( $serv , $worker_id) {        require_once "reload_page.php";        Test();    }    public function onConnect( $serv, $fd, $from_id ) {        echo "Client {$fd} connect\n";     }    public function onReceive( swoole_server $serv, $fd, $from_id, $data ) {        echo "Get Message From Client {$fd}:{$data}\n";    }    public function onClose( $serv, $fd, $from_id ) {        echo "Client {$fd} close connection\n";    }}new Server();

reload.sh

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

reload_page.php 

<?php/** * If you change this function and want * swoole_server to use the new function, * just run 'reload.sh' to send a restart * signal to swoole_server. */function Test() {  echo "This is not a php file\n";}

到此这篇关于php中SWOOLE的热更新实现代码实例的文章就介绍到这了,更多相关php中SWOOLE的热更新实现内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章