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 相关文章推荐
动态生成gif格式的图像要注意?
Oct 09 PHP
单一index.php实现PHP任意层级文件夹遍历(Zjmainstay原创)
Jul 31 PHP
php上传中文文件名乱码问题处理方案
Feb 03 PHP
支付宝支付开发――当面付条码支付和扫码支付实例
Nov 04 PHP
利用PHPStorm如何开发Laravel应用详解
Aug 30 PHP
PHP排序算法之简单选择排序(Simple Selection Sort)实例分析
Apr 20 PHP
php中访问修饰符的知识点总结
Jan 27 PHP
Laravel5.1框架注册中间件的三种场景详解
Jul 09 PHP
php时间戳转换代码详解
Aug 04 PHP
laravel 使用auth编写登录的方法
Sep 30 PHP
PHP之多条件混合筛选功能的实现方法
Oct 09 PHP
Yii框架组件的事件机制原理与用法分析
Apr 07 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
ThinkPHP基于PHPExcel导入Excel文件的方法
2014/10/15 PHP
WordPress中编写自定义存储字段的相关PHP函数解析
2015/12/25 PHP
解析WordPress中控制用户登陆和判断用户登陆的PHP函数
2016/03/01 PHP
php微信开发之上传临时素材
2016/06/24 PHP
PHP数据库编程之MySQL优化策略概述
2017/08/16 PHP
laravel withCount 统计关联数量的方法
2019/10/10 PHP
JS 容错处理代码, 屏蔽错误信息
2021/03/09 Javascript
TFDN图片播放器 不错自动播放
2006/10/03 Javascript
javascript css styleFloat和cssFloat
2010/03/15 Javascript
jQuery对象与DOM对象之间的转换方法
2010/04/15 Javascript
在JavaScript中监听IME键盘输入事件
2011/05/29 Javascript
JS对话框_JS模态对话框showModalDialog用法总结
2014/01/11 Javascript
7个JS基础知识总结
2014/03/05 Javascript
jquery中checkbox全选失效的解决方法
2014/12/26 Javascript
js实现文本框中输入文字页面中div层同步获取文本框内容的方法
2015/03/03 Javascript
七个不允许错过的jQuery小技巧
2015/12/21 Javascript
Javascript之Date对象详解
2016/06/07 Javascript
jQuery 3.0十大新特性
2016/07/06 Javascript
聊一聊Vue.js过渡效果
2016/09/07 Javascript
Sequelize中用group by进行分组聚合查询
2016/12/12 Javascript
vue2.0 实现导航守卫(路由守卫)
2018/05/21 Javascript
Javascript 类型转换、封闭函数及常见内置对象操作示例
2019/11/15 Javascript
Python中跳台阶、变态跳台阶与矩形覆盖问题的解决方法
2018/05/19 Python
Python列表(List)知识点总结
2019/02/18 Python
用Python徒手撸一个股票回测框架搭建【推荐】
2019/08/05 Python
django框架基于queryset和双下划线的跨表查询操作详解
2019/12/11 Python
Python 实现Image和Ndarray互相转换
2020/02/19 Python
Django框架配置mysql数据库实现过程
2020/04/22 Python
中国最大的名表商城:万表网
2016/08/29 全球购物
网络技术支持面试题
2013/04/22 面试题
函授本科毕业生自我鉴定
2013/10/16 职场文书
经销商订货会主持词
2014/03/27 职场文书
大学专科求职信
2014/07/02 职场文书
冬季作息时间调整通知
2015/04/24 职场文书
圣诞晚会主持词
2015/07/01 职场文书
Python list列表删除元素的4种方法
2021/11/01 Python