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编程开发“虚拟域名”系统
Oct 09 PHP
PHP nl2br函数 将换行字符转成 &amp;lt;br&amp;gt;
Aug 21 PHP
PHP Zip解压 文件在线解压缩的函数代码
May 26 PHP
php 代码优化之经典示例
Mar 24 PHP
基于HBase Thrift接口的一些使用问题及相关注意事项的详解
Jun 03 PHP
Apache实现Web Server负载均衡详解(不考虑Session版)
Jul 05 PHP
destoon实现公司新闻详细页添加评论功能的方法
Jul 15 PHP
php生成验证码函数
Oct 20 PHP
PHP工程师VIM配置分享
Dec 15 PHP
PHP微信刮刮卡 附微信接口
Jul 22 PHP
php JWT在web端中的使用方法教程
Sep 06 PHP
PHP封装的page分页类定义与用法完整示例
Dec 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
phpstrom使用xdebug配置方法
2013/12/17 PHP
phplot生成图片类用法详解
2015/01/06 PHP
给WordPress中的留言加上楼层号的PHP代码实例
2015/12/14 PHP
Symfony2之session与cookie用法小结
2016/03/18 PHP
PHP基于redis计数器类定义与用法示例
2018/02/08 PHP
浅谈PHP中的那些魔术常量
2020/12/02 PHP
jQuery AJAX实现调用页面后台方法和web服务定义的方法分享
2012/03/01 Javascript
javascript获取checkbox复选框获取选中的选项
2014/08/12 Javascript
z-blog SyntaxHighlighter 长代码无法换行解决办法(基于jquery)
2015/11/18 Javascript
js自定义回调函数
2015/12/13 Javascript
详解Bootstrap四种图片样式
2016/01/04 Javascript
jQuery中$.each()函数的用法引申实例
2016/05/12 Javascript
JS实现快速的导航下拉菜单动画效果附源码下载
2016/11/01 Javascript
JS中Safari浏览器中的Date
2017/07/17 Javascript
详解在express站点中使用ejs模板引擎
2017/09/21 Javascript
详解jQuery中的isPlainObject()使用方法
2018/02/27 jQuery
ES6关于Promise的用法详解
2018/05/07 Javascript
jQuery实现的鼠标拖动浮层功能示例【拖动div等任何标签】
2018/12/29 jQuery
vue 实现cli3.0中使用proxy进行代理转发
2019/10/30 Javascript
[38:42]完美世界DOTA2联赛循环赛 Matador vs Forest BO2第二场 11.05
2020/11/05 DOTA
Python中逗号的三种作用实例分析
2015/06/08 Python
Python循环语句之break与continue的用法
2015/10/14 Python
Python实现基本线性数据结构
2016/08/22 Python
利用Python中的pandas库对cdn日志进行分析详解
2017/03/07 Python
解决python3中cv2读取中文路径的问题
2018/12/05 Python
python单线程文件传输的实例(C/S)
2019/02/13 Python
使用turtle绘制五角星、分形树
2019/10/06 Python
Python变量及数据类型用法原理汇总
2020/08/06 Python
Sandro Paris美国官网:典雅别致的法国时尚服饰品牌
2017/12/26 全球购物
战友聚会邀请函
2014/01/18 职场文书
爱心助学感谢信
2015/01/21 职场文书
自主招生自荐信范文
2015/03/04 职场文书
2015年教师党员自我评价材料
2015/03/04 职场文书
Nginx访问日志及错误日志参数说明
2021/03/31 Servers
只用Python就可以制作的简单词云
2021/06/07 Python
一篇文章带你了解Python和Java的正则表达式对比
2021/09/15 Python