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教程孙仲岳主讲
Jan 07 PHP
mysql时区问题
Mar 26 PHP
php5中date()得出的时间为什么不是当前时间的解决方法
Jun 30 PHP
php 表单提交大量数据发生丢失的解决方法
Mar 03 PHP
PHP中substr()与explode()函数用法分析
Nov 24 PHP
thinkphp3.0输出重复两次的解决方法
Dec 19 PHP
php实现多维数组中每个单元值(数字)翻倍的方法
Feb 16 PHP
php mysql like 实现多关键词搜索的方法
Oct 29 PHP
php微信公众号开发之现金红包
Apr 16 PHP
php判断电子邮件是否正确方法
Dec 04 PHP
基于PHP的微信公众号的开发流程详解
Aug 07 PHP
PHP7 windows支持
Mar 09 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中json_encode()和json_decode()
2014/05/25 PHP
PHP下载远程图片并保存到本地方法总结
2016/01/22 PHP
Docker 如何布置PHP开发环境
2016/06/21 PHP
Laravel第三方包报class not found的解决方法
2019/10/13 PHP
PHP7 新增功能
2021/03/09 PHP
List the Codec Files on a Computer
2007/06/11 Javascript
JavaScript 乱码问题
2009/08/06 Javascript
js实现快速分享功能(你的文章分享工具)
2013/06/25 Javascript
setTimeout()与setInterval()方法区别介绍
2013/12/24 Javascript
javascript跨浏览器的属性判断方法
2014/03/16 Javascript
jQuery实现仿路边灯箱广告图片轮播效果
2015/04/15 Javascript
JS实现简单的二元方程计算器功能示例
2017/01/03 Javascript
网页中右键功能的实现方法之contextMenu的使用
2017/02/20 Javascript
Angular异步变同步处理方法
2018/08/13 Javascript
vue.js中ref和$refs的使用及示例讲解
2019/08/14 Javascript
vuejs+element UI table表格中实现禁用部分复选框的方法
2019/09/20 Javascript
微信小程序获取当前位置和城市名
2019/11/13 Javascript
微信小程序实现通讯录列表展开收起
2020/11/18 Javascript
[17:45]DOTA2 HEROES教学视频教你分分钟做大人-军团指挥官
2014/06/11 DOTA
python中base64加密解密方法实例分析
2015/05/16 Python
python判断图片宽度和高度后删除图片的方法
2015/05/22 Python
Python在不同目录下导入模块的实现方法
2017/10/27 Python
Python简单计算给定某一年的某一天是星期几示例
2018/06/27 Python
Python 互换字典的键值对实例
2019/02/12 Python
快速查找Python安装路径方法
2020/02/06 Python
python 实现图像快速替换某种颜色
2020/06/04 Python
利用Python将图片中扭曲矩形的复原
2020/09/07 Python
AmazeUI 平滑滚动效果的示例代码
2020/08/20 HTML / CSS
大学生旷课检讨书
2014/01/22 职场文书
党员岗位承诺书
2014/03/25 职场文书
大学校务公开实施方案
2014/03/31 职场文书
党支部工作总结2015
2015/04/01 职场文书
学校财务管理制度
2015/08/04 职场文书
用position:sticky完美解决小程序吸顶问题的实现方法
2021/04/24 HTML / CSS
javascript的setTimeout()使用方法总结
2021/11/20 Javascript
java协程框架quasar和kotlin中的协程对比分析
2022/02/24 Java/Android