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 相关文章推荐
第十二节--类的自动加载
Nov 16 PHP
解析php做推送服务端实现ios消息推送
Jul 01 PHP
PHP与javascript实现变量交互的示例代码
Jul 23 PHP
destoon安全设置中需要设置可写权限的目录及文件
Jun 21 PHP
yii操作cookie实例简介
Jul 09 PHP
php中使用gd库实现远程图片下载实例
May 12 PHP
php生成txt文件实例代码介绍
Apr 28 PHP
Yii数据读取与跳转参数传递用法实例分析
Jul 12 PHP
Yii2中使用asset压缩js,css文件的方法
Nov 24 PHP
PHP 搜索查询功能实现
Nov 29 PHP
PHP实现字符串翻转功能的方法【递归与循环算法】
Nov 03 PHP
php操作redis常见方法示例【key与value操作】
Apr 14 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获取数组中重复最多的元素的实现方法
2014/11/11 PHP
不要小看注释掉的JS 引起的安全问题
2008/12/27 Javascript
基于JQuery实现相同内容合并单元格的代码
2011/01/12 Javascript
自己写的兼容ie和ff的在线文本编辑器类似ewebeditor
2012/12/12 Javascript
JavaScript的漂亮的代码片段
2013/06/05 Javascript
详细解读JavaScript编程中的Promise使用
2015/07/27 Javascript
跟我学习JScript的Bug与内存管理
2015/11/18 Javascript
js点击按钮实现水波纹效果代码(CSS3和Canves)
2016/09/15 Javascript
jQuery实现弹出窗口弹出div层的实例代码
2017/01/09 Javascript
微信小程序 sha1 实现密码加密实例详解
2017/07/06 Javascript
JS实现合并json对象的方法
2017/10/10 Javascript
nodejs中函数的调用实例详解
2018/10/31 NodeJs
微信小程序中显示倒计时代码实例
2019/05/09 Javascript
JavaScript函数式编程(Functional Programming)纯函数用法分析
2019/05/22 Javascript
JS实现按比例缩小图片宽高
2020/08/24 Javascript
python将xml xsl文件生成html文件存储示例讲解
2013/12/03 Python
python获取mp3文件信息的方法
2015/06/15 Python
python数据分析数据标准化及离散化详解
2018/02/26 Python
利用Pycharm断点调试Python程序的方法
2018/11/29 Python
python获取响应某个字段值的3种实现方法
2020/04/30 Python
python程序如何进行保存
2020/07/03 Python
Python实现简单的猜单词小游戏
2020/10/28 Python
pymongo insert_many 批量插入的实例
2020/12/05 Python
HTML5之SVG 2D入门8—文档结构及相关元素总结
2013/01/30 HTML / CSS
商场中秋节广播稿
2014/01/17 职场文书
十岁生日父母答谢词
2014/01/18 职场文书
安卓程序员求职信
2014/02/28 职场文书
大学生自我鉴定书
2014/03/24 职场文书
社团活动总结报告
2014/06/27 职场文书
小学教师暑期培训方案
2014/08/28 职场文书
2014学习优秀共产党员先进事迹材料思想汇报
2014/09/14 职场文书
2014国庆节主题活动方案:快乐的国庆节
2014/09/16 职场文书
十月围城观后感
2015/06/08 职场文书
一文帮你理解PReact10.5.13源码
2021/04/03 Javascript
Pytest之测试命名规则的使用
2021/04/16 Python
《地。-关于地球的运动-》单行本第七集上市,小说家朝井辽献上期待又害怕的推荐文
2022/03/31 日漫