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 相关文章推荐
介绍几个array库的新函数 php
Dec 29 PHP
PHP关联链接常用代码
Nov 05 PHP
PHP实例分享判断客户端是否使用代理服务器及其匿名级别
Jun 04 PHP
Zend Framework页面缓存实例
Jun 25 PHP
PHP的Yii框架的常用日志操作总结
Dec 08 PHP
PHP面向对象编程之深入理解方法重载与方法覆盖(多态)
Dec 24 PHP
php实现的网页版剪刀石头布游戏示例
Nov 25 PHP
php、mysql查询当天,查询本周,查询本月的数据实例(字段是时间戳)
Feb 04 PHP
轻松实现php文件上传功能
Feb 17 PHP
PHP用户管理中常用接口调用实例及解析(含源码)
Mar 09 PHP
thinkPHP+LayUI 流加载实现功能
Sep 27 PHP
PHP安全之register_globals的on和off的区别
Jul 23 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
剧场版动画《PSYCHO-PASS 3 FIRST INSPECTOR》3月27日日本上映!
2020/03/06 日漫
php中iconv函数使用方法
2008/05/24 PHP
rephactor 优秀的PHP的重构工具
2011/06/09 PHP
php学习笔记 类的声明与对象实例化
2011/06/13 PHP
深入理解curl类,可用于模拟get,post和curl下载
2013/06/08 PHP
PHP魔术引号所带来的安全问题分析
2014/07/15 PHP
PHP中调用C/C++制作的动态链接库的教程
2016/03/10 PHP
PHP微信开发之有道翻译
2016/06/23 PHP
Yii中的cookie的发送和读取
2016/07/27 PHP
基于swoole实现多人聊天室
2018/06/14 PHP
Laravel框架实现的上传图片到七牛功能详解
2019/09/06 PHP
dojo 之基础篇(三)之向服务器发送数据
2007/03/24 Javascript
js 调整select 位置的函数
2008/02/21 Javascript
一些mootools的学习资源
2010/02/07 Javascript
本地对象Array的原型扩展实现代码
2010/12/04 Javascript
node.js中的fs.futimesSync方法使用说明
2014/12/17 Javascript
jQuery中Form相关知识汇总
2015/01/06 Javascript
Backbone.js 0.9.2 源码注释中文翻译版
2015/06/25 Javascript
jquery通过name属性取值的简单实现方法
2016/06/20 Javascript
AngularJS 的$timeout服务示例代码
2017/09/21 Javascript
详解如何在vue项目中使用eslint+prettier格式化代码
2018/11/10 Javascript
[56:35]DOTA2上海特级锦标赛主赛事日 - 5 总决赛Liquid VS Secret第一局
2016/03/06 DOTA
[01:14:30]TNC vs VG 2019国际邀请赛淘汰赛 胜者组赛BO3 第二场 8.20.mp4
2019/08/22 DOTA
python 七种邮件内容发送方法实例
2014/04/22 Python
Python 输出时去掉列表元组外面的方括号与圆括号的方法
2018/12/24 Python
python实现桌面壁纸切换功能
2019/01/21 Python
HTML5边玩边学(2)基础绘图实现方法
2010/09/21 HTML / CSS
2013年保送生自荐信格式
2013/11/20 职场文书
农救科工作职责
2013/11/27 职场文书
采购部部门职责
2013/12/15 职场文书
《彩色世界》教学反思
2014/04/12 职场文书
结婚保证书范文
2014/04/29 职场文书
先进事迹材料范文
2014/12/29 职场文书
心术观后感
2015/06/11 职场文书
2015年度学校应急管理工作总结
2015/10/22 职场文书
postgresql 删除重复数据案例详解
2021/08/02 PostgreSQL