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 array_intersect()函数使用代码
Jan 14 PHP
php简单提示框alert封装函数
Aug 08 PHP
PHP取进制余数函数代码
Jan 19 PHP
无需重新编译php加入ftp扩展的解决方法
Feb 07 PHP
PHP设置图片文件上传大小的具体实现方法
Oct 11 PHP
php判断页面是否是微信打开的示例(微信打开网页)
Apr 25 PHP
Linux系统递归生成目录中文件的md5的方法
Jun 29 PHP
Twig模板引擎用法入门教程
Jan 20 PHP
php fread函数使用方法总结
May 28 PHP
php curl发送请求实例方法
Aug 01 PHP
Laravel统计一段时间间隔的数据方法
Oct 09 PHP
Thinkphp极验滑动验证码实现步骤解析
Nov 24 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函数之日期时间函数date()使用详解
2013/09/09 PHP
PHP同时连接多个mysql数据库示例代码
2014/03/17 PHP
PHP类的封装与继承详解
2015/09/29 PHP
详解PHP数组赋值方法
2015/11/07 PHP
JQuyer $.post 与 $.ajax 访问WCF ajax service 时的问题需要注意的地方
2011/09/20 Javascript
js日期时间补零的小例子
2013/03/05 Javascript
Jquery操作下拉框(DropDownList)实现取值赋值
2013/08/13 Javascript
node.js中的forEach()是同步还是异步呢
2015/01/29 Javascript
js 右侧浮动层效果实现代码(跟随滚动)
2015/11/22 Javascript
jQuery事件绑定on()与弹窗实现代码
2016/04/28 Javascript
详解webpack 多入口配置
2017/06/16 Javascript
通过V8源码看一个关于JS数组排序的诡异问题
2017/08/14 Javascript
javascript少儿编程关于返回值的函数内容
2018/05/27 Javascript
LayUi中接口传数据成功,表格不显示数据的解决方法
2018/08/19 Javascript
JS实现获取自定义属性data值的方法示例
2018/12/19 Javascript
Vue源码解析之数据响应系统的使用
2019/04/24 Javascript
bootstrap 日期控件 datepicker被弹出框dialog覆盖的解决办法
2019/07/09 Javascript
利用 python 对目录下的文件进行过滤删除
2017/12/27 Python
python中类的属性和方法介绍
2018/11/27 Python
Django实现任意文件上传(最简单的方法)
2020/06/03 Python
Python实现一个简单的递归下降分析器
2020/08/01 Python
python中Django文件上传方法详解
2020/08/05 Python
pandas map(),apply(),applymap()区别解析
2021/02/24 Python
Html5 postMessage实现跨域消息传递
2016/03/11 HTML / CSS
Footshop罗马尼亚:最好的运动鞋选择
2019/09/10 全球购物
C++面试题目
2013/06/25 面试题
个人能力自我鉴赏
2014/01/25 职场文书
美容院店长岗位职责
2014/04/08 职场文书
心理学专业求职信
2014/06/16 职场文书
学习党的群众路线对照检查材料
2014/09/29 职场文书
2014年小学教学工作总结
2014/11/13 职场文书
乐山大佛导游词
2015/02/02 职场文书
试用期工作表现自我评价
2015/03/06 职场文书
导游词之湖北武当山
2019/09/23 职场文书
PHP中国际化的字符串排序和比较对象详解
2021/08/23 PHP
使用Python解决图表与画布的间距问题
2022/04/11 Python