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 相关文章推荐
图书管理程序(二)
Oct 09 PHP
文件上传程序的全部源码
Oct 09 PHP
屏蔽机器人从你的网站搜取email地址的php代码
Nov 14 PHP
PHP延迟静态绑定示例分享
Jun 22 PHP
Yii使用CLinkPager分页实例详解
Jul 23 PHP
Thinkphp关闭缓存的方法
Jun 26 PHP
eclipse php wamp配置教程
Jun 30 PHP
总结PHP删除字符串最后一个字符的三种方法
Aug 30 PHP
PHP cookie,session的使用与用户自动登录功能实现方法分析
Jun 05 PHP
Laravel向公共模板赋值方法总结
Jun 25 PHP
Thinkphp 框架扩展之标签库驱动原理与用法分析
Apr 23 PHP
PHP7原生MySQL数据库操作实现代码
Jul 03 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动态图像的创建
2006/10/09 PHP
dedecms系统的广告设置代码 基础版本
2010/04/09 PHP
php长字符串定义方法
2012/07/12 PHP
数组与类使用PHP的可变变量名需要的注意的问题
2013/06/20 PHP
PHP重置数组为连续数字索引的几种方式总结
2018/03/12 PHP
PHPMailer ThinkPHP实现自动发送邮件功能
2018/06/10 PHP
JSON 教程 json入门学习笔记
2020/09/22 Javascript
IE 当eval遇上function的处理
2011/08/09 Javascript
jQuery EasyUI API 中文文档 - Tree树使用介绍
2011/11/19 Javascript
IE6浏览器下resize事件被执行了多次解决方法
2012/12/11 Javascript
使用Plupload实现直接上传附件至七牛云存储
2014/12/26 Javascript
jQuery实现页面内锚点平滑跳转特效的方法总结
2015/05/11 Javascript
使用vue.js2.0 + ElementUI开发后台管理系统详细教程(一)
2017/01/21 Javascript
详解vue中使用express+fetch获取本地json文件
2017/10/10 Javascript
vue自定义移动端touch事件之点击、滑动、长按事件
2018/07/10 Javascript
JavaScript&quot;模拟事件&quot;的注意要点详解
2019/02/13 Javascript
js 将多个对象合并成一个对象 assign方法的实现
2020/09/24 Javascript
Python多进程同步Lock、Semaphore、Event实例
2014/11/21 Python
Python基于PycURL自动处理cookie的方法
2015/07/25 Python
python3使用urllib模块制作网络爬虫
2016/04/08 Python
Python实现FM算法解析
2019/06/18 Python
解决Python3下map函数的显示问题
2019/12/04 Python
彻底弄明白CSS3的Media Queries(跨平台设计)
2010/07/27 HTML / CSS
利用简洁的图片预加载组件提升html5移动页面的用户体验
2016/03/11 HTML / CSS
英国最出名高街品牌:Forever Unique
2018/02/24 全球购物
即时搜索数百万张门票:SeatsForEveryone.com
2018/08/26 全球购物
ZWILLING双立人法国网上商店:德国刀具锅具厨具品牌
2019/08/28 全球购物
为您搜罗全球潮流時尚品牌:HBX
2019/12/04 全球购物
经济系大学生求职信
2013/10/01 职场文书
酒吧创业计划书
2014/01/18 职场文书
电脑销售顾问自荐信
2014/01/29 职场文书
工作业绩不及格检讨书
2014/10/28 职场文书
端午节寄语2015
2015/03/23 职场文书
幼儿园大班开学寄语(2015秋季)
2015/05/27 职场文书
工伤事故赔偿协议书
2015/08/06 职场文书
PHP对接阿里云虚拟号的实现(号码隐私保护)
2021/04/06 PHP