Hyperf热更新

本文编写于 2020-10-28,部分观点可能已经过时。

前言

最近想在新项目中使用 Hyperf,但是在尝试没多久之后,就遇到了各种问题。

其中比较头疼的就是热更新。

方案

手动停止、启动项目

这是一个比较累的工作。

使用IDE监测文件的保存

大部分 IDE 中都存在这个功能。

Sublime 在这方面并不是很友好,当然,对于大神级别的应该不是问题。

手动编译

因为我用的是 Sublime,所以我这边举一个 Sublime 的例子。

首先,创建一个编译系统。Tools -> Build System -> New Build System...

添加编译系统

接着,编写执行时需要执行的命令。(我本地使用的是 Docker,只需要重启容器就好)

编写编译时要执行的命令

接着,保存为 Hyperf.sublime-build。并选择 Hyperf 作为编译系统。

选择自定义编译系统

最后,编写完代码之后,Ctrl+B 一键编译。

编译结果

使用watch改造

基于 SwooleProcess/Timer/Event 实现,定时扫描文件并监听文件变动重启服务。

不依赖其它扩展,性能表现一般,全平台可用,体验较好(可在控制台直接输出运行日志)。

下载地址:Github 传送门

使用方式:

  1. 复制 watch 文件到项目根目录,即 bin 目录所在的那一层。

  2. 启动

    php watch -c

可能遇到的问题:

Docker 中,一直因为 9501 端口被监听,导致重启 Hyperf 失败。

解决方式:

修改 @change 方法,如下:

function change()
{
    global $serve;
    echo CONSOLE_COLOR_YELLOW . "🔄 Restart @ " . date('Y-m-d H:i:s') . PHP_EOL;
    // Process::kill($serve->pid);
    shell_exec('kill -9 ' . $serve->pid);
    start();
}

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!