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 相关文章推荐
自己前几天写的无限分类类
Feb 14 PHP
深入apache host的配置详解
Jun 09 PHP
PHP删除数组中特定元素的两种方法
Jul 02 PHP
php实现的zip文件内容比较类
Sep 24 PHP
php中异常处理方法小结
Jan 09 PHP
thinkPHP5.0框架开发规范简介
Mar 25 PHP
PHP依赖注入(DI)和控制反转(IoC)详解
Jun 12 PHP
php-msf源码详解
Dec 25 PHP
PHP INT类型在内存中占字节详解
Jul 20 PHP
Laravel 5.5 异常处理 &amp; 错误日志的解决
Oct 17 PHP
tp5 实现列表数据根据状态排序
Oct 18 PHP
PHP 实现缩略图
Mar 09 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笔记之:日期函数的使用介绍
2013/04/24 PHP
php中的常用魔术方法汇总
2016/02/14 PHP
Windows平台实现PHP连接SQL Server2008的方法
2017/07/26 PHP
PHP实现的AES双向加密解密功能示例【128位】
2018/09/03 PHP
PHP+redis实现的限制抢购防止商品超发功能详解
2019/09/19 PHP
BootStrap的弹出框(Popover)支持鼠标移到弹出层上弹窗层不隐藏的原因及解决办法
2016/04/03 Javascript
AngularJs Managing Service Dependencies详解
2016/09/02 Javascript
详解react服务端渲染(同构)的方法
2017/09/21 Javascript
js操作二进制数据方法
2018/03/03 Javascript
Vue中的混入的使用(vue mixins)
2018/06/01 Javascript
详解vue-element Tree树形控件填坑路
2019/03/26 Javascript
小程序点击图片实现png转jpg
2019/10/22 Javascript
在vue中created、mounted等方法使用小结
2020/07/21 Javascript
jQuery实现简单轮播图效果
2020/12/27 jQuery
python实现图片批量剪切示例
2014/03/25 Python
Django 接收Post请求数据,并保存到数据库的实现方法
2019/07/12 Python
PYTHON EVAL的用法及注意事项解析
2019/09/06 Python
Python面向对象之多态原理与用法案例分析
2019/12/30 Python
Python使用enumerate获取迭代元素下标
2020/02/03 Python
Python中os模块功能与用法详解
2020/02/26 Python
keras实现VGG16 CIFAR10数据集方式
2020/07/07 Python
Python为何不支持switch语句原理详解
2020/10/21 Python
Pandas对每个分组应用apply函数的实现
2020/12/13 Python
北京一家公司的.net开发工程师笔试题
2012/04/17 面试题
remote接口和home接口主要作用
2013/05/15 面试题
手术室护士自我鉴定
2013/10/14 职场文书
学生个人的自我评价分享
2013/11/05 职场文书
平面设计师的工作职责
2013/11/21 职场文书
节能减排倡议书
2014/04/15 职场文书
中国梦口号
2014/06/13 职场文书
政风行风评议心得体会
2014/10/21 职场文书
情况说明书格式及范文
2019/06/24 职场文书
Nginx配置SSL证书出错解决方案
2021/03/31 Servers
oracle DGMGRL ORA-16603报错的解决方法(DG Broker)
2021/04/06 Oracle
MySql 8.0及对应驱动包匹配的注意点说明
2021/06/23 MySQL
漫画「处刑少女的生存之道」第3卷封面公开
2022/03/21 日漫