php中Swoole的热更新实现代码实例

 更新时间:2021年03月04日 12:00:09   作者:weixin_34209851  
这篇文章主要介绍了php中SWOOLE的热更新实现代码实例,热更新是比较常用的技术,有需要同学可以研究下

使用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利用新浪接口查询ip获取地理位置示例

    php利用新浪接口查询ip获取地理位置示例

    这篇文章主要介绍了php利用新浪接口查询ip获取地理位置示例,大家参考使用吧
    2014-01-01
  • php获取目录下所有文件及目录(多种方法)(推荐)

    php获取目录下所有文件及目录(多种方法)(推荐)

    这篇文章主要介绍了php获取目录下所有文件及目录多种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-05-05
  • ThinkPHP3.1新特性之内容解析输出详解

    ThinkPHP3.1新特性之内容解析输出详解

    以往版本的ThinkPHP对于模板文件保存在数据库里面的情况下,无法进行模板文件读取的。这篇文章主要介绍了ThinkPHP3.1新特性的内容解析输出,需要的朋友可以参考下
    2014-06-06
  • php文件上传的简单实例

    php文件上传的简单实例

    这篇文章介绍了php文件上传的简单实例,有需要的朋友可以参考一下
    2013-10-10
  • ThinkPHP空模块和空操作详解

    ThinkPHP空模块和空操作详解

    这篇文章主要介绍了ThinkPHP空模块和空操作,需要的朋友可以参考下
    2014-06-06
  • Yii2下点击验证码的切换实例代码

    Yii2下点击验证码的切换实例代码

    本篇文章主要介绍了Yii2下验证码的切换实例代码,实例分析了Yii2下验证码的切换的技巧,非常具有实用价值,需要的朋友可以参考下。
    2017-03-03
  • php之app消息推送案例教程

    php之app消息推送案例教程

    这篇文章主要介绍了php之app消息推送案例教程,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • PHP xpath提取网页数据内容代码解析

    PHP xpath提取网页数据内容代码解析

    这篇文章主要介绍了PHP xpath提取网页数据内容代码解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • 深入理解PHP中的count函数

    深入理解PHP中的count函数

    下面小编就为大家带来一篇深入理解PHP中的count函数。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-05-05
  • 深入浅析php json 格式控制

    深入浅析php json 格式控制

    这篇文章主要介绍了深入浅析php json 格式控制的相关资料,需要的朋友可以参考下
    2015-12-12

最新评论