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 金额数字转换成英文
May 06 PHP
php计算十二星座的函数代码
Aug 21 PHP
优化PHP代码技巧的小结
Jun 02 PHP
基于header的一些常用指令详解
Jun 06 PHP
php启用zlib压缩文件的配置方法
Jun 12 PHP
zf框架的Filter过滤器使用示例
Mar 13 PHP
PHP微信红包API接口
Dec 05 PHP
PHP实现RSA签名生成订单功能【支付宝示例】
Jun 06 PHP
php脚本守护进程原理与实现方法详解
Jul 20 PHP
PHP fclose函数用法总结
Feb 15 PHP
php简单检测404页面的方法示例
Aug 23 PHP
php 中的信号处理操作实例详解
Mar 04 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中使用imagick实现把PDF转成图片
2015/01/26 PHP
PHP模拟登陆163邮箱发邮件及获取通讯录列表的方法
2015/03/07 PHP
win7系统配置php+Apache+mysql环境的方法
2015/08/21 PHP
Linux系统下使用XHProf和XHGui分析PHP运行性能
2015/12/08 PHP
javascript new fun的执行过程
2010/08/05 Javascript
javascript alert乱码的解决方法
2013/11/05 Javascript
JS如何将数字类型转化为没3个一个逗号的金钱格式
2014/01/27 Javascript
jQuery定义背景动态切换效果的方法
2015/03/23 Javascript
原生js制作简单的数字键盘
2015/04/24 Javascript
JQuery简单实现锚点链接的平滑滚动
2015/05/03 Javascript
Javascript实现获取及设置光标位置的方法
2015/07/21 Javascript
原生JS封装Ajax插件(同域、jsonp跨域)
2016/05/03 Javascript
jquery,js简单实现类似Angular.js双向绑定
2017/01/13 Javascript
JS字符串长度判断,超出进行自动截取的实例(支持中文)
2017/03/06 Javascript
JavaScript实现反转字符串的方法详解
2017/04/27 Javascript
微信小程序登录换取token的教程
2018/05/31 Javascript
VUE脚手架具体使用方法
2019/05/20 Javascript
JavaScript队列结构Queue实现过程解析
2020/03/07 Javascript
js实现消灭星星(web简易版)
2020/03/24 Javascript
react 原生实现头像滚动播放的示例
2020/04/21 Javascript
vue 动态设置img的src地址无效,npm run build 后找不到文件的解决
2020/07/26 Javascript
urllib2自定义opener详解
2014/02/07 Python
详解Python在七牛云平台的应用(一)
2017/12/05 Python
Python Opencv实现图像轮廓识别功能
2020/03/23 Python
如何通过50行Python代码获取公众号全部文章
2019/07/12 Python
Windows 下更改 jupyterlab 默认启动位置的教程详解
2020/05/18 Python
CSS3颜色值RGBA与渐变色使用介绍
2020/03/06 HTML / CSS
有750多个顶级品牌的瑞士时尚在线:ABOUT YOU
2017/01/04 全球购物
发现世界上最好的珠宝设计师:JewelStreet
2017/12/17 全球购物
初一体育教学反思
2014/01/29 职场文书
光学与应用专业毕业生求职信
2014/09/01 职场文书
Apache压力测试工具的安装使用
2021/03/31 Servers
matlab xlabel位置的设置方式
2021/05/21 Python
【海涛七七解说】DCG第二周:DK VS 天禄
2022/04/01 DOTA
Nginx反向代理、重定向
2022/04/13 Servers
Python写情书? 10行代码展示如何把情书写在她的照片里
2022/04/21 Python