hyperf/docs/zh-cn/watcher.md
张子彬 0fbda4f915
Added FindNewerDriver which is friendly with mac, linux and docker for watcher. (#3170)
* Added FindNewerDriver
* Update documents and changelog

Co-authored-by: zhangzibin <zhangzibin@idvert.com>
Co-authored-by: 李铭昕 <715557344@qq.com>
2021-01-23 13:09:45 +08:00

81 lines
2.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 热更新 Watcher
自从 `2.0` 版本使用了 `BetterReflection` 来收集扫描目录内的 `语法树``反射数据`,导致扫描速度相较 `1.1` 慢了不少。
> 首次启动,因为没有任何缓存,所以会比较慢,当二次启动时,会按照文件修改时间,进行动态收集,但因为仍需要实例化 `BetterReflection`,所以启动时间仍然比较长。
`Watcher` 组件除了解决上述启动问题,还提供了文件修改后立马重启的功能。
## 安装
```
composer require hyperf/watcher --dev
```
## 配置
### 发布配置
```bash
php bin/hyperf.php vendor:publish hyperf/watcher
```
### 配置说明
| 配置 | 默认值 | 备注 |
| :------------: | :--------------: | :-------------------------------------------------------: |
| driver | `ScanFileDriver` | 默认定时扫描文件驱动 |
| bin | `php` | 用于启动服务的脚本 例如 `php -d swoole.use_shortname=Off` |
| watch.dir | `app`, `config` | 监听目录 |
| watch.file | `.env` | 监听文件 |
| watch.interval | `2000` | 扫描间隔(毫秒) |
## 支持驱动
| 驱动 | 备注 |
| :-----------------------------------: | :---------------------------------: |
| Hyperf\Watcher\Driver\ScanFileDriver | 无需扩展 |
| Hyperf\Watcher\Driver\FswatchDriver | 需要安装 fswatch |
| Hyperf\Watcher\Driver\FindDriver | 需要安装 findMAC 下需要安装 gfind |
| Hyperf\Watcher\Driver\FindNewerDriver | 需要安装 find |
### `fswatch` 安装
Mac
```bash
brew install fswatch
```
Ubuntu/Debian
```bash
apt-get install fswatch
```
其他
```bash
wget https://github.com/emcrisostomo/fswatch/releases/download/1.14.0/fswatch-1.14.0.tar.gz \
&& tar -xf fswatch-1.14.0.tar.gz \
&& cd fswatch-1.14.0/ \
&& ./configure \
&& make \
&& make install
```
## 启动
因为目录的关系,需要在项目根目录中运行。
```bash
php bin/hyperf.php server:watch
```
## 不足
- 暂时 Alpine Docker 环境下,稍微有点问题,后续会完善。
- 删除文件和修改`.env`需要手动重启才能生效。
- vendor 中的文件需要使用 classmap 形式自动加载才能被扫描。(即执行`composer dump-autoload -o`)