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.MVC的模板标签系统(一)
Sep 05 PHP
php中处理模拟rewrite 效果
Dec 09 PHP
PHP结合jQuery实现找回密码
Jul 22 PHP
YII Framework框架教程之国际化实现方法
Mar 14 PHP
PHP发送AT指令实例代码
May 26 PHP
PHP中for循环与foreach的区别
Mar 06 PHP
PHP编程获取音频文件时长的方法【基于getid3类】
Apr 20 PHP
ThinkPHP中create()方法自动验证实例
Apr 26 PHP
php实现支付宝当面付(扫码支付)功能
May 30 PHP
PHP实现的无限分类类库定义与用法示例【基于thinkPHP】
Aug 06 PHP
php web环境和命令行环境下查找php.ini的位置
Jul 17 PHP
在Laravel中使用GuzzleHttp调用第三方服务的API接口代码
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的session cookie错误
2009/08/09 PHP
PHP+memcache实现消息队列案例分享
2014/05/21 PHP
PHP获取一个字符串中间一部分字符的方法
2014/08/19 PHP
PHP strcmp()和strcasecmp()的区别实例
2016/11/05 PHP
php支付宝系列之电脑网站支付
2018/05/30 PHP
[原创]后缀就扩展名为js的文件是什么文件
2007/12/06 Javascript
JavaScript入门教程(10) 认识其他对象
2009/01/31 Javascript
js replace正则表达式应用案例讲解
2013/01/17 Javascript
含有CKEditor的表单如何提交
2014/01/09 Javascript
javascript定义变量时有var和没有var的区别探讨
2014/07/21 Javascript
jquery $(document).ready()和window.onload的区别浅析
2015/02/04 Javascript
node.js调用C++开发的模块实例
2015/07/03 Javascript
JS基于myFocus库实现各种功能的tab选项卡切换效果
2015/09/19 Javascript
AngularJS 中的指令实践开发指南(一)
2016/03/20 Javascript
Node.js五大应用性能技巧小结(必须收藏)
2017/08/09 Javascript
关于express与koa的使用对比详解
2018/01/25 Javascript
axios 处理 302 状态码的解决方法
2018/04/10 Javascript
浅析Vue项目中使用keep-Alive步骤
2018/07/27 Javascript
使用vue制作滑动标签
2019/09/21 Javascript
微信小程序利用for循环解决内容变更问题
2020/03/05 Javascript
记一次react前端项目打包优化的方法
2020/03/30 Javascript
[50:02]完美世界DOTA2联赛PWL S2 Magma vs FTD 第三场 11.29
2020/12/03 DOTA
docker django无法访问redis容器的解决方法
2019/08/21 Python
Python中的list与tuple集合区别解析
2019/10/12 Python
Django框架HttpResponse对象用法实例分析
2019/11/01 Python
解决Pytorch 加载训练好的模型 遇到的error问题
2020/01/10 Python
Python3实现mysql连接和数据框的形成(实例代码)
2020/01/17 Python
python编写softmax函数、交叉熵函数实例
2020/06/11 Python
Python如何对齐字符串
2020/07/30 Python
Python实现冒泡排序算法的完整实例
2020/11/04 Python
Html5 APP中监听返回事件处理的方法示例
2018/03/15 HTML / CSS
高清屏中使用Canvas绘图出现模糊的问题及解决方法
2019/06/03 HTML / CSS
专题组织生活会思想汇报
2014/10/01 职场文书
2014年教育实习工作总结
2014/11/22 职场文书
2015年安全生产责任书
2015/01/30 职场文书
Netflix《海贼王》真人版剧集多张片场照曝光
2022/04/04 日漫