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做的端口嗅探器--可以指定网站和端口
Oct 09 PHP
针对初学PHP者的疑难问答(1)
Oct 09 PHP
PHP生成HTML静态页面实例代码
Aug 31 PHP
PHP 冒泡排序算法的实现代码
Aug 08 PHP
仿AS3实现PHP 事件机制实现代码
Jan 27 PHP
php获取服务器信息的实现代码
Feb 04 PHP
实用的简单PHP分页集合包括使用方法
Oct 21 PHP
ThinkPHP分页类使用详解
Mar 05 PHP
简单解决新浪SAE无法上传文件的问题
May 13 PHP
PHP安装GeoIP扩展根据IP获取地理位置及计算距离的方法
Jul 01 PHP
PHP实现的XXTEA加密解密算法示例
Aug 28 PHP
PHP静态方法和静态属性及常量属性的区别与介绍
Mar 22 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
Zend Guard一些常见问题解答
2008/09/11 PHP
PHP 显示客户端IP与服务器IP的代码
2010/10/12 PHP
php连接odbc数据源并保存与查询数据的方法
2014/12/24 PHP
PHP的Laravel框架中使用消息队列queue及异步队列的方法
2016/03/21 PHP
jquery $.ajax相关用法分享
2012/03/16 Javascript
datagrid框架的删除添加与修改
2013/04/08 Javascript
Javascript获取HTML静态页面参数传递值示例
2013/08/18 Javascript
微信JSSDK上传图片
2015/08/23 Javascript
javascript实现图片左右滚动效果【可自动滚动,有左右按钮】
2016/09/19 Javascript
jQuery+vue.js实现的多选下拉列表功能示例
2019/01/15 jQuery
Vue中CSS动画原理的实现
2019/02/13 Javascript
vue中使用props传值的方法
2019/05/08 Javascript
js实现简单放大镜效果
2020/03/07 Javascript
使用IPython下的Net-SNMP来管理类UNIX系统的教程
2015/04/15 Python
在windows系统中实现python3安装lxml
2016/03/23 Python
python 除法保留两位小数点的方法
2018/07/16 Python
使用50行Python代码从零开始实现一个AI平衡小游戏
2018/11/21 Python
在Python 中同一个类两个函数间变量的调用方法
2019/01/31 Python
PIL对上传到Django的图片进行处理并保存的实例
2019/08/07 Python
Python安装tar.gz格式文件方法详解
2020/01/19 Python
pycharm第三方库安装失败的问题及解决经验分享
2020/05/09 Python
Tensorflow--取tensorf指定列的操作方式
2020/06/30 Python
面向新手解析python Beautiful Soup基本用法
2020/07/11 Python
scrapy-splash简单使用详解
2021/02/21 Python
世界上最好的精品店:Shoptiques
2018/02/05 全球购物
德国内衣、泳装和睡衣网上商店:Bigsize Dessous
2018/07/09 全球购物
《搭石》教学反思
2014/04/07 职场文书
毕业生求职信
2014/06/10 职场文书
投标承诺函范文
2015/01/21 职场文书
医生个人年度总结
2015/02/28 职场文书
2015年度高中教师工作总结
2015/05/26 职场文书
新教师2015年度工作总结
2015/07/22 职场文书
党员心得体会范文2016
2016/01/23 职场文书
多人股份制合作协议书
2016/03/19 职场文书
什么是求职信?求职信应包含哪些内容?
2019/08/14 职场文书
python+opencv实现视频抽帧示例代码
2021/06/11 Python