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和ACCESS写聊天室(一)
Oct 09 PHP
php xml实例 留言本
Mar 20 PHP
php与XML、XSLT、Mysql的结合运用实现代码
Nov 19 PHP
php中将数组存到文件里的实现代码
Jan 19 PHP
PHP SPL使用方法和他的威力
Nov 12 PHP
thinkphp模板输出技巧汇总
Nov 24 PHP
php获取访问者IP地址汇总
Apr 24 PHP
php集成套件服务器xampp安装使用教程(适合第一次玩PHP的新手)
Jun 03 PHP
深入理解PHP中的count函数
May 31 PHP
php 二维数组快速排序算法的实现代码
Oct 17 PHP
thinkphp5 URL和路由的功能详解与实例
Dec 26 PHP
PHP实现用session来实现记录用户登陆信息
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中return 和 exit 、break和contiue 区别与用法
2012/04/09 PHP
PHP判断数据库中的记录是否存在的方法
2014/11/14 PHP
php实现字符串反转输出的方法
2015/03/14 PHP
THINKPHP支持YAML配置文件的设置方法
2015/03/17 PHP
PHP时间戳和日期相互转换操作实例小结
2018/12/18 PHP
JavaScript类和继承 constructor属性
2010/03/04 Javascript
javascript动态添加删除tabs标签的方法
2015/07/06 Javascript
基于OL2实现百度地图ABCD marker的效果
2015/10/01 Javascript
JS中对Cookie的操作详解
2016/08/05 Javascript
使用JS实现图片展示瀑布流效果(简单实例)
2016/09/06 Javascript
深入理解javascript中的 “this”
2017/01/17 Javascript
微信小程序实战之上拉(分页加载)效果(2)
2017/04/17 Javascript
详解如何将 Vue-cli 改造成支持多页面的 history 模式
2017/11/20 Javascript
深入理解Vue官方文档梳理之全局API
2017/11/22 Javascript
jQuery实现的简单对话框拖动功能示例
2018/06/05 jQuery
解决vue打包css文件中背景图片的路径问题
2018/09/03 Javascript
在vue中使用echarts图表实例代码详解
2018/10/22 Javascript
详解基于webpack&amp;gettext的前端多语言方案
2019/01/29 Javascript
pm2发布node配置文件ecosystem.json详解
2019/05/15 Javascript
vue 解决遍历对象显示的顺序不对问题
2019/11/07 Javascript
Vue项目中使用flow做类型检测的方法
2020/03/18 Javascript
[02:29]大剑、皮鞭、女装,这届DOTA2勇士令状里都有
2020/07/17 DOTA
布同 统计英文单词的个数的python代码
2011/03/13 Python
Python获取当前页面内所有链接的四种方法对比分析
2017/08/19 Python
Python实现微信消息防撤回功能的实例代码
2019/04/29 Python
Django admin model 汉化显示文字的实现方法
2019/08/12 Python
pycharm 代码自动补全的实现方法(图文)
2020/09/18 Python
婚庆司仪主持词
2014/03/15 职场文书
根叔历年演讲稿
2014/05/20 职场文书
公证委托书
2014/08/01 职场文书
放飞梦想演讲稿200字
2014/08/26 职场文书
个人务虚会发言材料
2014/10/20 职场文书
2015年班级工作总结范文
2015/04/03 职场文书
创卫工作总结2015
2015/04/22 职场文书
解决python存数据库速度太慢的问题
2021/04/23 Python
Python实现抖音热搜定时爬取功能
2022/03/16 Python