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利用header函数实现文件下载时直接提示保存
Nov 12 PHP
深入探讨:PHP使用数据库永久连接方式操作MySQL的是与非
Jun 05 PHP
php获取bing每日壁纸示例分享
Feb 25 PHP
Windows下Apache + PHP SESSION丢失的解决过程全纪录
Apr 07 PHP
php数字每三位加逗号的功能函数
Oct 22 PHP
php数组冒泡排序算法实例
May 06 PHP
功能强大的PHP POST提交数据类
Jul 15 PHP
PHP 微信扫码支付源代码(推荐)
Nov 03 PHP
深入浅出讲解:php的socket通信原理
Dec 03 PHP
PHP实现分布式memcache设置web集群session同步的方法
Apr 10 PHP
PHP getName()函数讲解
Feb 03 PHP
PHP获取当前时间不准确问题解决方案
Aug 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中文分词 自动获取关键词介绍
2012/11/13 PHP
基于php常用正则表达式的整理汇总
2013/06/08 PHP
Yii2框架实现注册和登录教程
2016/09/30 PHP
PHP调用微博接口实现微博登录的方法示例
2018/09/22 PHP
javascript 操作文件 实现方法小结
2009/07/02 Javascript
JavaScript 变量基础知识
2009/11/07 Javascript
javascript 正则替换 replace(regExp, function)用法
2010/05/22 Javascript
JS简单实现元素复制示例附图
2013/11/19 Javascript
js截取固定长度的中英文字符的简单实例
2013/11/22 Javascript
JavaScript使用二分查找算法在数组中查找数据的方法
2015/04/07 Javascript
JavaScript对象学习小结
2015/09/02 Javascript
JQuery+Ajax实现数据查询、排序和分页功能
2015/09/27 Javascript
Jquery和Js获得元素标签名称的方法总结
2016/10/08 Javascript
JS正则表达式判断有效数实例代码
2017/03/13 Javascript
详解vue2.0的Element UI的表格table列时间戳格式化
2017/06/13 Javascript
解决vue打包css文件中背景图片的路径问题
2018/09/03 Javascript
详解解决Vue相同路由参数不同不会刷新的问题
2018/10/12 Javascript
详解Vue基于vue-quill-editor富文本编辑器使用心得
2019/01/03 Javascript
我要点爆”微信小程序云开发之项目建立与我的页面功能实现
2019/05/26 Javascript
Angular 中使用 FineReport不显示报表直接打印预览
2019/08/21 Javascript
python 添加用户设置密码并发邮件给root用户
2016/07/25 Python
Python处理文本文件中控制字符的方法
2017/02/07 Python
Python快速转换numpy数组中Nan和Inf的方法实例说明
2019/02/21 Python
Django中如何防范CSRF跨站点请求伪造攻击的实现
2019/04/28 Python
Python实现通过解析域名获取ip地址的方法分析
2019/05/17 Python
简单了解python 生成器 列表推导式 生成器表达式
2019/08/22 Python
安装Pycharm2019以及配置anconda教程的方法步骤
2019/11/11 Python
使用Python爬虫库requests发送请求、传递URL参数、定制headers
2020/01/25 Python
python 浮点数四舍五入需要注意的地方
2020/08/18 Python
详解FireFox下Canvas使用图像合成绘制SVG的Bug
2019/07/10 HTML / CSS
AmazeUI 评论列表的实现示例
2020/08/13 HTML / CSS
客户表扬信范文
2014/01/10 职场文书
市优秀教师事迹材料
2014/02/05 职场文书
高中运动会广播稿
2015/08/19 职场文书
Java网络编程之UDP实现原理解析
2021/09/04 Java/Android
总结高并发下Nginx性能如何优化
2021/11/01 Servers