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 相关文章推荐
Excel数据导入Mysql数据库的实现代码
Jun 05 PHP
php 攻击方法之谈php+mysql注射语句构造
Oct 30 PHP
zend api扩展的php对象的autoload工具
Apr 18 PHP
php header Content-Type类型小结
Jul 03 PHP
PHP操作Memcache实例介绍
Jun 14 PHP
ThinkPHP实现批量删除数据的代码实例
Jul 02 PHP
浅谈使用 PHP 进行手机 APP 开发(API 接口开发)
Aug 11 PHP
PHP积分兑换接口实例
Feb 09 PHP
php实现向javascript传递数组的方法
Jul 27 PHP
php使用Jpgraph创建柱状图展示年度收支表效果示例
Feb 15 PHP
PHP操作Redis数据库常用方法示例
Aug 25 PHP
PHP反射基础知识回顾
Sep 10 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 无限级缓存的类的扩展
2009/03/16 PHP
PHP JSON 数据解析代码
2010/05/26 PHP
PHP 第三节 变量介绍
2012/04/28 PHP
php获取$_POST同名参数数组的实现介绍
2013/06/30 PHP
ThinkPHP整合百度Ueditor图文教程
2014/10/21 PHP
下拉菜单点击实现连接跳转功能的js代码
2013/05/19 Javascript
jquery中load方法的用法及注意事项说明
2014/02/22 Javascript
AngularJS 执行流程详细介绍
2016/08/18 Javascript
关于微信jssdk实现多图片上传的一点心得分享
2016/12/13 Javascript
简单三步实现报表页面集成天气
2016/12/15 Javascript
vue2实现移动端上传、预览、压缩图片解决拍照旋转问题
2017/04/13 Javascript
JavaScript使用readAsDataUrl方法预览图片
2017/05/10 Javascript
vue子父组件通信的实现代码
2017/07/09 Javascript
express如何使用session与cookie的方法
2018/01/30 Javascript
vue中使用ueditor富文本编辑器
2018/02/08 Javascript
详解vue中this.$emit()的返回值是什么
2019/04/07 Javascript
vue2.0 实现富文本编辑器功能
2019/05/26 Javascript
js实现图片区域可点击大小随意改变(适用移动端)代码实例
2019/09/11 Javascript
webpack中的模式(mode)使用详解
2020/02/20 Javascript
使用C语言来扩展Python程序和Zope服务器的教程
2015/04/14 Python
python类的继承实例详解
2017/03/30 Python
通过Python实现自动填写调查问卷
2017/09/06 Python
Python3与fastdfs分布式文件系统如何实现交互
2020/06/23 Python
Python下划线5种含义代码实例解析
2020/07/10 Python
通过实例了解Python异常处理机制底层实现
2020/07/23 Python
网络通讯中,端口有什么含义,端口的取值范围
2012/11/23 面试题
应届护士推荐信
2013/11/16 职场文书
打架检讨书400字
2014/01/17 职场文书
学生思想表现的评语
2014/01/30 职场文书
工商企业管理应届生求职信
2014/05/04 职场文书
生物学专业求职信
2014/07/23 职场文书
小学师德师风演讲稿
2014/09/02 职场文书
统计工作个人总结
2015/03/03 职场文书
初中班主任心得体会
2016/01/07 职场文书
Python中的min及返回最小值索引的操作
2021/05/10 Python
CSS布局之浮动(float)和定位(position)属性的区别
2021/09/25 HTML / CSS