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 mysql数据库操作类
Jun 04 PHP
PHP源码之 ext/mysql扩展部分
Jul 17 PHP
PHP 魔术函数使用说明
May 14 PHP
浅析echo(),print(),print_r(),return之间的区别
Nov 27 PHP
php获取客户端电脑屏幕参数的方法
Jan 09 PHP
Laravel实现自定义错误输出内容的方法
Oct 10 PHP
PHP内存缓存功能memcached示例
Oct 19 PHP
Symfony2创建基于域名的路由相关示例
Nov 14 PHP
通过php动态传数据到highcharts
Apr 05 PHP
ThinkPHP框架表单验证操作方法
Jul 19 PHP
使用YII2框架实现微信公众号中表单提交功能
Sep 04 PHP
PHP ob缓存以及ob函数原理实例解析
Nov 13 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
Admin generator, filters and I18n
2011/10/06 PHP
PHP插入排序实现代码
2013/04/04 PHP
file_get_contents(&quot;php://input&quot;, &quot;r&quot;)实例介绍
2013/07/01 PHP
php 读取文件头判断文件类型的实现代码
2013/08/05 PHP
迅速确定php多维数组的深度的方法
2014/01/07 PHP
PHP中file_exists函数不支持中文名的解决方法
2014/07/26 PHP
PHP制作百度词典查词采集器
2015/01/29 PHP
老生常谈PHP中的数据结构:DS扩展
2017/07/17 PHP
Javascript 个人笔记(没有整理,很乱)
2007/07/07 Javascript
为JavaScript添加重载函数的辅助方法
2010/07/04 Javascript
JS中getYear()和getFullYear()区别分析
2014/07/04 Javascript
JS实现touch 点击滑动轮播实例代码
2017/01/19 Javascript
JS区分Object与Aarry的六种方法总结
2017/02/27 Javascript
基于JavaScript实现图片连播和联级菜单实例代码
2017/07/28 Javascript
vue awesome swiper异步加载数据出现的bug问题
2018/07/03 Javascript
vue+SSM实现验证码功能
2018/12/07 Javascript
Django+vue跨域问题解决的详细步骤
2019/01/20 Javascript
基于JS实现一个随机生成验证码功能
2019/05/29 Javascript
Moment.js实现多个同时倒计时
2019/08/26 Javascript
Vue.js实现大屏数字滚动翻转效果
2019/11/29 Javascript
[01:08]DOTA2“血战之命”预告片
2017/08/12 DOTA
[01:03:03]VP vs Mineski 2018国际邀请赛淘汰赛BO3 第一场 8.22
2018/08/23 DOTA
Python中针对函数处理的特殊方法
2014/03/06 Python
详解pyqt5 动画在QThread线程中无法运行问题
2018/05/05 Python
python实现基于信息增益的决策树归纳
2018/12/18 Python
python利用thrift服务读取hbase数据的方法
2018/12/27 Python
python3通过udp实现组播数据的发送和接收操作
2020/05/05 Python
大学生自我鉴定
2013/12/16 职场文书
单位承诺书格式
2014/05/21 职场文书
幼儿教师求职信
2014/05/24 职场文书
经贸日语专业自荐信
2014/09/02 职场文书
迎新年主持词
2015/07/06 职场文书
理解深度学习之深度学习简介
2021/04/14 Python
python实现自定义日志的具体方法
2021/05/28 Python
使用Django实现商城验证码模块的方法
2021/06/01 Python
python中redis包操作数据库的教程
2022/04/19 Python