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


Posted in PHP onMarch 04, 2021

使用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/sh
kill `lsof -t -i:9501`
sleep 2
php /data/web/mircoweb/wwwroot/Public/swoole.php
sleep 1
netstat -ntlp

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

swoole服务平滑重启

1. reload.sh脚本

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

2. linux中执行

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

swoole_reload_server.php

<?php
class 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的热更新实现内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

PHP 相关文章推荐
让PHP支持断点续传的源码
May 16 PHP
PHP执行zip与rar解压缩方法实现代码
Dec 05 PHP
PHP5权威编程阅读学习笔记 附电子书下载
Jul 05 PHP
PHP输出时间差函数代码
Jan 28 PHP
php多个字符串替换成同一个的解决方法
Jun 18 PHP
php加密解密函数authcode的用法详细解析
Oct 28 PHP
php单例模式实现方法分析
Mar 14 PHP
PHP+Ajax验证码验证用户登录
Jul 20 PHP
Yii2中使用asset压缩js,css文件的方法
Nov 24 PHP
PHP网站自动化配置的实现方法(必看)
May 27 PHP
解决PHP Opcache 缓存刷新、代码重载出现无法更新代码的问题
Aug 24 PHP
深入解析PHP底层机制及相关原理
Dec 11 PHP
PHP安装扩展mcrypt以及相关依赖项深入讲解
Mar 04 #PHP
PHP实现页面静态化深入讲解
Mar 04 #PHP
php实现对短信验证码发送次数的限制实例讲解
Mar 04 #PHP
swoole锁的机制代码实例讲解
Mar 04 #PHP
PHP实现chrome表单请求数据转换为接口使用的json数据
Mar 04 #PHP
windows系统php环境安装swoole具体步骤
Mar 04 #PHP
php中使用array_filter()函数过滤数组实例讲解
Mar 03 #PHP
You might like
PHP HTML代码串 截取实现代码
2009/06/29 PHP
php利用cookies实现购物车的方法
2014/12/10 PHP
PHP对称加密函数实现数据的加密解密
2016/10/27 PHP
Zend Framework入门教程之Zend_Session会话操作详解
2016/12/08 PHP
PHP实现页面静态化深入讲解
2021/03/04 PHP
Javascript this关键字使用分析
2008/10/21 Javascript
javascript学习笔记(四) Number 数字类型
2012/06/19 Javascript
jQuery.fn和jQuery.prototype区别介绍
2013/10/05 Javascript
javascript 按键事件(兼容各浏览器)
2013/12/20 Javascript
javascript客户端遍历控件与获取父容器对象示例代码
2014/01/06 Javascript
innerHTML中标签可以换行的方法汇总
2015/08/14 Javascript
dul无法加载bootstrap实现unload table/user恢复
2016/09/29 Javascript
JS中实现函数return多个返回值的实例
2017/02/21 Javascript
详解VUE的状态控制与延时加载刷新
2017/03/27 Javascript
Vue.js 60分钟快速入门教程
2017/03/28 Javascript
使用JavaScript破解web
2018/09/28 Javascript
js使用cookie实现记住用户名功能示例
2019/06/13 Javascript
python正则表达式修复网站文章字体不统一的解决方法
2013/02/21 Python
Python的Flask框架中web表单的教程
2015/04/20 Python
利用Python生成文件md5校验值函数的方法
2017/01/10 Python
python Matplotlib画图之调整字体大小的示例
2017/11/20 Python
Python3中关于cookie的创建与保存
2018/10/21 Python
win7 x64系统中安装Scrapy的方法
2018/11/18 Python
Python实现爬取亚马逊数据并打印出Excel文件操作示例
2019/05/16 Python
pytorch 实现在预训练模型的 input上增减通道
2020/01/06 Python
python实现打砖块游戏
2020/02/25 Python
马来西亚网上购物平台:ezbuy
2018/02/13 全球购物
自荐信不宜过于夸大
2013/11/06 职场文书
护士检查书
2014/01/17 职场文书
《月迹》教学反思
2014/02/19 职场文书
财产保全担保书范文
2014/04/01 职场文书
移风易俗倡议书
2014/04/15 职场文书
政府门卫岗位职责
2014/04/29 职场文书
写给同学的新学期寄语
2015/02/27 职场文书
违反纪律检讨书范文
2015/05/07 职场文书
为Centos安装指定版本的Docker
2022/04/01 Servers