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 相关文章推荐
第五节--克隆
Nov 16 PHP
PHP 数据结构 算法描述 冒泡排序 bubble sort
Jul 10 PHP
PHP逐行输出(ob_flush与flush的组合)
Feb 04 PHP
基于ubuntu下nginx+php+mysql安装配置的具体操作步骤
Apr 28 PHP
PHP之生成GIF动画的实现方法
Jun 07 PHP
使用php将某个目录下面的所有文件罗列出来的方法详解
Jun 21 PHP
php实现图片添加水印功能
Feb 13 PHP
ThinkPHP之getField详解
Jun 20 PHP
Eclipse的PHP插件PHPEclipse安装和使用
Jul 20 PHP
thinkPHP+PHPExcel实现读取文件日期的方法(含时分秒)
Jul 07 PHP
PHP对象、模式与实践之高级特性分析
Dec 08 PHP
php查看一个变量的占用内存的实例代码
Mar 29 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静态类
2006/11/25 PHP
FCKeditor添加自定义按钮
2008/03/27 PHP
PHP session有效期session.gc_maxlifetime
2011/04/20 PHP
Yii2中使用join、joinwith多表关联查询
2016/06/30 PHP
safari下载文件自动加了html后缀问题
2018/11/09 PHP
在JavaScript中实现命名空间
2006/11/23 Javascript
小型js框架veryide.librar源代码
2009/03/05 Javascript
javascript写的简单的计算器,内容很多,方法实用,推荐
2011/12/29 Javascript
jquery插件jquery倒计时插件分享
2013/12/27 Javascript
jQuery中ajax的get()方法用法实例
2014/12/26 Javascript
jquery 判断div show的状态实例
2016/12/03 Javascript
浅析Jquery操作select
2016/12/13 Javascript
原生js获取浏览器窗口及元素宽高常用方法集合
2017/01/18 Javascript
JavaScript数组去重的6个方法
2017/01/21 Javascript
nodejs构建本地web测试服务器 如何解决访问静态资源问题
2017/07/14 NodeJs
jQuery 实现左右两侧菜单添加、移除功能
2018/01/02 jQuery
微信小程序在其他页面监听globalData中值的变化
2019/07/15 Javascript
Vue强制组件重新渲染的方法讨论
2020/02/03 Javascript
python迭代器的使用方法实例
2013/11/21 Python
Python使用xlwt模块操作Excel的方法详解
2018/03/27 Python
Python3自动签到 定时任务 判断节假日的实例
2018/11/13 Python
python 函数嵌套及多函数共同运行知识点讲解
2020/03/03 Python
Python select及selectors模块概念用法详解
2020/06/22 Python
SmartBuyGlasses台湾:名牌眼镜,名牌太阳眼镜及隐形眼镜
2017/01/04 全球购物
德国户外商店:eXXpozed
2020/07/25 全球购物
腾讯公司的一个sql题
2013/01/22 面试题
园林资料员岗位职责
2013/12/30 职场文书
岗位廉洁从政承诺书
2014/03/27 职场文书
物业消防安全责任书
2014/07/23 职场文书
手术室护士节演讲稿
2014/08/27 职场文书
个人先进事迹材料范文
2014/12/29 职场文书
病危通知单
2015/04/17 职场文书
2015年高校图书馆工作总结
2015/04/30 职场文书
深入理解go slice结构
2021/09/15 Golang
基于MySql验证的vsftpd虚拟用户
2021/11/07 MySQL
Python实现仓库管理系统
2022/05/30 Python