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学习资源和链接.
Dec 05 PHP
PHP与SQL注入攻击[一]
Apr 17 PHP
php模拟post行为代码总结(POST方式不是绝对安全)
Feb 22 PHP
PHP获取网址的顶级域名函数代码
Sep 24 PHP
PHP更新购物车数量(表单部分/PHP处理部分)
May 03 PHP
PHP中比较两个字符串找出第一个不同字符位置例子
Apr 08 PHP
PHP基本语法总结
Sep 06 PHP
PHP实现对二维数组某个键排序的方法
Sep 14 PHP
利用PHP生成静态html页面的原理
Sep 30 PHP
使用Zttp简化Guzzle 调用
Jul 02 PHP
PHP基于SimpleXML生成和解析xml的方法示例
Jul 17 PHP
php微信开发之关键词回复功能
Jun 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
菜鸟学PHP之Smarty入门
2007/01/04 PHP
用PHP生成静态HTML速度快类库
2007/03/18 PHP
浅谈PHP中JSON数据操作
2015/07/01 PHP
PHP面向对象程序设计方法实例详解
2016/12/24 PHP
PHP常用函数总结(180多个)
2016/12/25 PHP
javascript firefox不显示本地预览图片问题的解决方法
2008/11/12 Javascript
JSQL  一个 web DB 的封装
2010/05/05 Javascript
jQuery实现的五子棋游戏实例
2015/06/13 Javascript
浅谈setTimeout 与 setInterval
2015/06/23 Javascript
JavaScript利用HTML DOM进行文档操作的方法
2016/03/28 Javascript
jQueryUI DatePicker 添加时分秒
2016/06/04 Javascript
ThinkJS中如何使用MongoDB的CURD操作
2016/12/13 Javascript
深入理解Vue.js源码之事件机制
2017/09/27 Javascript
Express本地测试HTTPS的示例代码
2018/06/06 Javascript
详解Jest结合Vue-test-utils使用的初步实践
2019/06/27 Javascript
Vue代码整洁之去重方法整理
2019/08/06 Javascript
基于JavaScript实现贪吃蛇游戏
2020/03/16 Javascript
有趣的JavaScript隐式类型转换操作实例分析
2020/05/02 Javascript
快速解决Vue、element-ui的resetFields()方法重置表单无效的问题
2020/08/12 Javascript
vue实践---根据不同环境,自动转换请求的url地址操作
2020/09/21 Javascript
[02:37]2015国际邀请赛选手档案—LGD.Xiao8
2015/07/28 DOTA
[01:01:24]DOTA2上海特级锦标赛A组败者赛 EHOME VS CDEC第三局
2016/02/25 DOTA
python基础教程之lambda表达式使用方法
2014/02/12 Python
Python实现全角半角转换的方法
2014/08/18 Python
如何用python写一个简单的词法分析器
2018/12/18 Python
在Python中如何传递任意数量的实参的示例代码
2019/03/21 Python
复化梯形求积分实例——用Python进行数值计算
2019/11/20 Python
python如何使用代码运行助手
2020/07/03 Python
浅析Python 抽象工厂模式的优缺点
2020/07/13 Python
h5使用canvas画布实现手势解锁
2019/01/04 HTML / CSS
英国珠宝和手表专家:Pleasance & Harper
2020/10/21 全球购物
业务主管岗位职责
2013/11/20 职场文书
煤矿安全保证书
2015/02/27 职场文书
2015大学自主招生自荐信范文
2015/03/04 职场文书
MySQL的prepare使用以及遇到的bug
2022/05/11 MySQL
SpringBoot前端后端分离之Nginx服务器下载安装过程
2022/08/14 Servers