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 相关文章推荐
一个阿拉伯数字转中文数字的函数
Oct 09 PHP
解析posix与perl标准的正则表达式区别
Jun 17 PHP
解析php中用PHPMailer来发送邮件的示例(126.com的例子)
Jun 24 PHP
PHP时间戳 strtotime()使用方法和技巧
Oct 29 PHP
PHP实现通用alert函数的方法
Mar 11 PHP
PHP中的traits实现代码复用使用实例
May 13 PHP
PHP模拟QQ登录的方法
Jul 29 PHP
详解PHP中的Traits
Jul 29 PHP
wampserver改变默认网站目录的办法
Aug 05 PHP
PHP mysql事务问题实例分析
Jan 18 PHP
详解PHP编码转换函数应用技巧
Oct 22 PHP
在Laravel中实现使用AJAX动态刷新部分页面
Oct 15 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 伪静态之IIS篇
2014/06/02 PHP
Web层改进II-用xmlhttp 无声息提交复杂表单
2007/01/22 Javascript
javascript禁制后退键(Backspace)实例代码
2013/11/15 Javascript
js实现数组去重、判断数组以及对象中的内容是否相同
2013/11/29 Javascript
jquery移除、绑定、触发元素事件使用示例详解
2014/04/10 Javascript
js实现字符串的16进制编码不加密
2014/04/25 Javascript
js解决select下拉选不中问题
2014/10/14 Javascript
jQuery 1.9.1源码分析系列(十三)之位置大小操作
2015/12/02 Javascript
JavaScript事件类型中UI事件详解
2016/01/14 Javascript
js老生常谈之this,constructor ,prototype全面解析
2016/04/05 Javascript
走进AngularJs之过滤器(filter)详解
2017/02/17 Javascript
JS原生数据双向绑定实现代码
2017/08/14 Javascript
javaScript日期工具类DateUtils详解
2017/12/08 Javascript
vue将对象新增的属性添加到检测序列的方法
2018/02/24 Javascript
Vue头像处理方案小结
2018/07/26 Javascript
Angular6 写一个简单的Select组件示例
2018/08/20 Javascript
vue移动端监听滚动条高度的实现方法
2018/09/03 Javascript
Vue render函数实战之实现tabs选项卡组件
2019/04/22 Javascript
对vuex中getters计算过滤操作详解
2019/11/06 Javascript
python实现按长宽比缩放图片
2018/06/07 Python
对pandas的层次索引与取值的新方法详解
2018/11/06 Python
基于Python pyecharts实现多种图例代码解析
2020/08/10 Python
Pycharm plot独立窗口显示的操作
2020/12/11 Python
Python3 + Appium + 安卓模拟器实现APP自动化测试并生成测试报告
2021/01/27 Python
对pytorch中x = x.view(x.size(0), -1) 的理解说明
2021/03/03 Python
美国花布包包品牌:Vera Bradley
2017/08/11 全球购物
工商管理应届生求职信
2013/10/07 职场文书
空乘英文求职信
2014/04/13 职场文书
建筑安全生产责任书
2014/07/22 职场文书
年会邀请函范文
2015/01/30 职场文书
环卫处个人工作总结
2015/03/04 职场文书
考试后的感想
2015/08/07 职场文书
队名及霸气口号大全
2015/12/25 职场文书
交互式可视化js库gojs使用介绍及技巧
2022/02/18 Javascript
Python IO文件管理的具体使用
2022/03/20 Python
Nginx 匹配方式
2022/05/15 Servers