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 相关文章推荐
为php4加入动态flash文件的生成的支持
Oct 09 PHP
发挥语言的威力--融合PHP与ASP
Oct 09 PHP
PHP+FLASH实现上传文件进度条相关文件 下载
Jul 21 PHP
PHP下对字符串的递增运算代码
Aug 21 PHP
php另类上传图片的方法(PHP用Socket上传图片)
Oct 30 PHP
linux下编译安装memcached服务
Aug 03 PHP
护卫神php套件 php版本升级方法(php5.5.24)
May 10 PHP
PHP中把有符号整型转换为无符号整型方法
May 27 PHP
php实现对象克隆的方法
Jun 20 PHP
Symfony2在Nginx下的配置方法图文教程
Feb 04 PHP
php短信接口代码
May 13 PHP
VSCode+PHPstudy配置PHP开发环境的步骤详解
Aug 20 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
自动分页的不完整解决方案
2007/01/12 PHP
5款适合PHP使用的HTML编辑器推荐
2015/07/03 PHP
laravel ORM 只开启created_at的几种方法总结
2018/01/29 PHP
thinkphp5框架实现的自定义扩展类操作示例
2019/05/16 PHP
非常不错的功能强大代码简单的管理菜单美化版
2008/07/09 Javascript
javaScript 判断字符串是否为数字的简单方法
2009/07/25 Javascript
js实现的日期操作类DateTime函数代码
2010/03/16 Javascript
jQuery EasyUI API 中文文档 - PropertyGrid属性表格
2011/11/18 Javascript
jquery用get实现ajax在ie里面刷新不进入后台解决方法
2013/08/12 Javascript
利用JQuery和Servlet实现跨域提交请求示例分享
2014/02/12 Javascript
node.js中的fs.readlinkSync方法使用说明
2014/12/17 Javascript
jQuery实现提交按钮点击后变成正在处理字样并禁止点击的方法
2015/03/24 Javascript
JavaScript中Date.toSource()方法的使用教程
2015/06/12 Javascript
基于JavaScript实现文字超出部分隐藏
2016/02/29 Javascript
js继承实现方法详解
2016/12/16 Javascript
微信小程序 基础知识css样式media标签
2017/02/15 Javascript
nodejs判断文件、文件夹是否存在及删除的方法
2017/11/10 NodeJs
Vue-cli Eslint在vscode里代码自动格式化的方法
2018/02/23 Javascript
vue中使用better-scroll实现滑动效果及注意事项
2018/11/15 Javascript
koa2使用ejs和nunjucks作为模板引擎的使用
2018/11/27 Javascript
关于Node.js中频繁修改代码重启服务器的问题
2020/10/15 Javascript
vant 解决tab切换插件标题样式自定义的问题
2020/11/13 Javascript
[45:59]EG vs OG 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
[01:20:47]DOTA2-DPC中国联赛 正赛 Ehome vs Magma BO3 第一场 1月19日
2021/03/11 DOTA
Python实现端口复用实例代码
2014/07/03 Python
Python requests库用法实例详解
2018/08/14 Python
在Pytorch中计算卷积方法的区别详解(conv2d的区别)
2020/01/03 Python
pycharm部署、配置anaconda环境的教程
2020/03/24 Python
高中班长自我鉴定
2013/12/20 职场文书
课外访万家心得体会
2014/09/03 职场文书
诉讼授权委托书范本
2014/10/05 职场文书
群众路线教育实践活动心得体会(四风)
2014/11/03 职场文书
史上最牛的辞职信
2015/02/28 职场文书
2015年度销售个人工作总结
2015/03/31 职场文书
python数字类型和占位符详情
2022/03/13 Python
Nginx动静分离配置实现与说明
2022/04/07 Servers