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 相关文章推荐
Eclipse中php插件安装及Xdebug配置的使用详解
Apr 25 PHP
PHP引用(&amp;)各种使用方法实例详解
Mar 20 PHP
php使用date和strtotime函数输出指定日期的方法
Nov 14 PHP
php实现图片等比例缩放代码
Jul 23 PHP
php resizeimage 部分jpg文件 生成缩略图失败的原因分析及解决办法
Mar 23 PHP
php 指定范围内多个随机数代码实例
Jul 18 PHP
PHP Callable强制指定回调类型的方法
Aug 30 PHP
php组合排序简单实现方法
Oct 15 PHP
php.ini中date.timezone设置详解
Nov 20 PHP
php使用json_decode后数字对象转换成了科学计数法的解决方法
Feb 20 PHP
使用swoole 定时器变更超时未支付订单状态的解决方案
Jul 24 PHP
PHP Beanstalkd消息队列的安装与使用方法实例详解
Feb 21 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/10/09 PHP
php curl常见错误:SSL错误、bool(false)
2011/12/28 PHP
php简单开启gzip压缩方法(zlib.output_compression)
2013/04/13 PHP
thinkPHP中钩子的使用方法实例分析
2017/11/16 PHP
php屏蔽错误及提示的方法
2020/05/10 PHP
js中几种去掉字串左右空格的方法
2006/12/25 Javascript
在Iframe中获取父窗口中表单的值(示例代码)
2013/11/22 Javascript
深入浅析JavaScript的API设计原则
2016/06/14 Javascript
jQuery简单设置文本框回车事件的方法
2016/08/01 Javascript
vue2.0+webpack环境的构造过程
2016/11/08 Javascript
vue中created和mounted的区别浅析
2019/08/13 Javascript
解决vue net :ERR_CONNECTION_REFUSED报错问题
2020/08/13 Javascript
Golang与python线程详解及简单实例
2017/04/27 Python
python中将一个全部为int的list 转化为str的list方法
2018/04/09 Python
使用python装饰器计算函数运行时间的实例
2018/04/21 Python
python中while和for的区别总结
2019/06/28 Python
使用pandas实现连续数据的离散化处理方式(分箱操作)
2019/11/22 Python
django创建超级用户时指定添加其它字段方式
2020/05/14 Python
详解pycharm连接远程linux服务器的虚拟环境的方法
2020/11/13 Python
CSS3 box-sizing属性
2009/04/17 HTML / CSS
html5 Canvas画图教程(7)—canvas里画曲线之quadraticCurveTo方法
2013/01/09 HTML / CSS
英国最大的老式糖果店:A Quarter Of
2017/04/08 全球购物
学习雷锋寄语大全
2014/04/11 职场文书
健康家庭事迹材料
2014/05/02 职场文书
年度优秀员工获奖感言
2014/08/15 职场文书
党员干部民主生活会议批评与自我批评材料
2014/09/20 职场文书
医生见习报告范文
2014/11/03 职场文书
单位计划生育责任书
2015/05/09 职场文书
2015年乡镇妇联工作总结
2015/05/19 职场文书
2015年小学二年级班主任工作总结
2015/05/21 职场文书
欢送会主持词
2015/07/01 职场文书
2015初中团委工作总结
2015/07/28 职场文书
小学信息技术教学反思
2016/02/16 职场文书
分享15个Webpack实用的插件!!!
2021/03/31 Javascript
Python 数据科学 Matplotlib图库详解
2021/07/07 Python
MySQL count(*)统计总数问题汇总
2022/09/23 MySQL