php使用goto实现自动重启swoole、reactphp、workerman服务的代码


Posted in PHP onApril 13, 2020

在平时使用swoole进行开发中,常常遇到这种问题,改了代码之后,手动ctrl+c中断服务,再敲命令重启服务。频繁地重启,感觉心很累。

php提供了inotify扩展,调用linux的inotify系统调用,监控文件的变化.

这时候就产生了一个想法,我开一个主进程监控文件变化,再开一个子进程运行swoole服务。主进程监听到文件变化之后,干掉子进程,然后再开一个子进程运行swoole服务. 子进程如果想优雅地退出,安装个信号处理器,在退出之前做一些操作。

<?php

//index.php

require './vendor/autoload.php';

Restart:

$pid = pcntl_fork();

if ($pid > 0) {
  $fd = inotify_init();
  $watch_descriptor = inotify_add_watch($fd, './src/', IN_MODIFY);

  $events = inotify_read($fd);

  posix_kill($pid, SIGTERM);
  
  fclose($fd);

  pcntl_wait($status);

  goto Restart;
} elseif ($pid == 0) {
  \Church\Application::run();
} else {
  exit(0);
}
<?php
namespace Church;

/**
use Psr\Http\Message\ServerRequestInterface;
use React\Http\Response;
use React\Http\Server;
**/

class Application
{
  public static function run()
  {
  /**
    $loop = \React\EventLoop\Factory::create();

    $loop->addSignal(SIGTERM, function() use ($loop) {
      $loop->stop();
    });

    $server = new Server(function (ServerRequestInterface $request) {

      return new Response(
        200,
        array(
          'Content-Type' => 'text/plain'
        ),
        "Hello World1!\n"
      );
    });

    $socket = new \React\Socket\Server(8080, $loop);
    $server->listen($socket);

    $loop->run();
  **/
    //高性能HTTP服务器
    $http = new \Swoole\Http\Server("127.0.0.1", 9501);

    $http->on("start", function ($server) {
      echo "Swoole http server is started at http://127.0.0.1:9501\n";
    });

    $http->on("request", function ($request, $response) {
      $response->header("Content-Type", "text/plain");
      $response->end("Hello World1\n");
    });

    $http->start();

  }
}

个人觉得这里最优雅的实现方式应该是用GOTO了。

到此这篇关于php使用goto实现自动重启swoole、reactphp、workerman服务的代码的文章就介绍到这了,更多相关php自动重启swoole、reactphp、workerman服务内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

PHP 相关文章推荐
PHP面向对象分析设计的经验原则
Sep 20 PHP
Cakephp 执行主要流程
Mar 24 PHP
PHP学习笔记 用户注册模块用户类以及验证码类
Sep 20 PHP
PHP将整个网站生成HTML纯静态网页的方法总结
Feb 05 PHP
php 定义404页面的实现代码
Nov 19 PHP
一个简洁的PHP可逆加密函数(分享)
Jun 06 PHP
php calender(日历)二个版本代码示例(解决2038问题)
Dec 24 PHP
ThinkPHP采用实现三级循环代码实例
Jul 18 PHP
php自动加载方式集合
Apr 04 PHP
遍历echsop的region表形成缓存的程序实例代码
Nov 01 PHP
PHP互换两个变量值的方法(不用第三变量)
Nov 14 PHP
laravel框架路由分组,中间件,命名空间,子域名,路由前缀实例分析
Feb 18 PHP
yii2.0框架多模型操作示例【添加/修改/删除】
Apr 13 #PHP
yii2.0框架实现上传excel文件后导入到数据库的方法示例
Apr 13 #PHP
php回调函数处理数组操作示例
Apr 13 #PHP
yii2.0框架数据库操作简单示例【添加,修改,删除,查询,打印等】
Apr 13 #PHP
laravel使用数据库测试注意事项
Apr 10 #PHP
为你的 Laravel 验证器加上多验证场景的实现
Apr 07 #PHP
再谈Yii Framework框架中的事件event原理与应用
Apr 07 #PHP
You might like
开发大型 PHP 项目的方法
2007/01/02 PHP
使用TinyButStrong模板引擎来做WEB开发
2007/03/16 PHP
php 页面执行时间计算代码
2008/12/04 PHP
ajax+php打造进度条代码[readyState各状态说明]
2010/04/12 PHP
Jquery 实现弹出层插件
2015/01/28 Javascript
jquery实现图片水平滚动效果代码分享
2015/08/26 Javascript
jquery实现图片列表鼠标移入微动
2016/12/01 Javascript
jQuery实现6位数字密码输入框
2016/12/29 Javascript
Angular实现下载安装包的功能代码分享
2017/09/05 Javascript
微信小程序button组件使用详解
2018/01/31 Javascript
zTree 树插件实现全国五级地区点击后加载的示例
2018/02/05 Javascript
Vue 获取数组键名的方法
2018/06/21 Javascript
vue实现在一个方法执行完后执行另一个方法的示例
2018/08/25 Javascript
详解如何模拟实现node中的Events模块(通俗易懂版)
2019/04/15 Javascript
js实现简单掷骰子小游戏
2019/10/24 Javascript
[52:06]完美世界DOTA2联赛决赛日 Inki vs LBZS 第一场 11.08
2020/11/10 DOTA
[43:03]完美世界DOTA2联赛PWL S2 PXG vs Magma 第二场 11.21
2020/11/24 DOTA
对numpy中向量式三目运算符详解
2018/10/31 Python
解决python3 Pycharm上连接数据库时报错的问题
2018/12/03 Python
pyqt5 实现工具栏文字图片同时显示
2019/06/13 Python
python利用itertools生成密码字典并多线程撞库破解rar密码
2019/08/12 Python
浅析Python语言自带的数据结构有哪些
2019/08/27 Python
python 3.6.7实现端口扫描器
2019/09/04 Python
matplotlib实现显示伪彩色图像及色度条
2019/12/07 Python
python程序输出无内容的解决方式
2020/04/09 Python
让IE支持CSS3的不完全兼容方案
2014/09/19 HTML / CSS
基于CSS3实现立方体自转效果
2016/03/01 HTML / CSS
加拿大最大的箱包及旅游配件零售商:Bentley Leathers
2017/07/19 全球购物
德国专业木制品经销商:Holz-Direkt24
2019/12/26 全球购物
毕业生个人的自我评价优秀范文
2013/10/03 职场文书
小型女装店的创业计划书
2014/01/09 职场文书
《识字五》教学反思
2014/03/01 职场文书
投标承诺书怎么写
2014/05/24 职场文书
基督教追悼会答谢词
2015/09/29 职场文书
pycharm代码删除恢复的方法
2021/06/26 Python
开机音效回归! Windows 11重新引入开机铃声
2021/11/21 数码科技