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 分页分组类
Dec 10 PHP
ajax实现无刷新分页(php)
Jul 18 PHP
解析PayPal支付接口的PHP开发方式
Nov 28 PHP
深入Apache与Nginx的优缺点比较详解
Jun 17 PHP
preg_match_all使用心得分享
Jan 31 PHP
php中get_defined_constants函数用法实例分析
May 12 PHP
54个提高PHP程序运行效率的方法
Jul 19 PHP
PHP支付系统设计与典型案例分享
Aug 02 PHP
PHP中TP5 上传文件的实例详解
Jul 31 PHP
PHP基于redis计数器类定义与用法示例
Feb 08 PHP
php关联数组与索引数组及其显示方法
Mar 12 PHP
Laravel监听数据库访问,打印SQL的例子
Oct 24 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防止sql注入代码实例
2013/12/18 PHP
php实现PDO中捕获SQL语句错误的方法
2017/02/16 PHP
[原创]php token使用与验证示例【测试可用】
2017/08/30 PHP
jquery.AutoComplete.js中文修正版(支持firefox)
2010/04/09 Javascript
判断客户端浏览器是否安装了Flash插件的多种方法
2010/08/11 Javascript
使用Jquery实现点击文字后变成文本框且可修改
2013/09/21 Javascript
跟我学Node.js(四)---Node.js的模块载入方式与机制
2014/06/04 Javascript
搭建pomelo 开发环境
2014/06/24 Javascript
js锁屏解屏通过对$.ajax进行封装实现
2014/07/31 Javascript
json属性名为什么要双引号(个人猜测)
2014/07/31 Javascript
jQuery遍历json的方法(推荐)
2016/06/12 Javascript
JS转换HTML转义符的方法
2016/08/24 Javascript
Query常用DIV操作获取和设置长度宽度的实现方法
2016/09/19 Javascript
layui选项卡效果实现代码
2017/05/19 Javascript
使用D3.js制作图表详解
2017/08/13 Javascript
一篇文章让你彻底弄懂JS的事件冒泡和事件捕获
2017/08/14 Javascript
webpack 处理CSS资源的实现
2019/09/27 Javascript
使用webpack将ES6转化ES5的实现方法
2019/10/13 Javascript
详解Python的Django框架中Manager方法的使用
2015/07/21 Python
用python写的一个wordpress的采集程序
2016/02/27 Python
浅析Python中MySQLdb的事务处理功能
2016/09/21 Python
再谈Python中的字符串与字符编码(推荐)
2016/12/14 Python
Pycharm学习教程(1) 定制外观
2017/05/02 Python
浅谈flask源码之请求过程
2018/07/26 Python
详解PyCharm配置Anaconda的艰难心路历程
2018/08/13 Python
python中partial()基础用法说明
2018/12/30 Python
基于python二叉树的构造和打印例子
2019/08/09 Python
时尚设计师手表:The Watch Cabin
2018/10/06 全球购物
美国室内和室外装饰花盆购物网站:ePlanters
2019/03/22 全球购物
真正的英国宝藏:Mappin & Webb
2019/05/05 全球购物
《湘夫人》教学反思
2014/02/21 职场文书
航海技术专业毕业生求职信
2014/04/06 职场文书
2014年业务员工作总结范文
2014/11/17 职场文书
责任书格式
2015/01/29 职场文书
教师个人总结范文
2015/02/11 职场文书
2015年乡镇卫生院工作总结
2015/04/22 职场文书