Added FindNewerDriver which is friendly with mac, linux and docker for watcher.#3170
Added FindNewerDriver which is friendly with mac, linux and docker for watcher.#3170limingxinleo merged 4 commits intohyperf:masterfrom windawake:master
FindNewerDriver which is friendly with mac, linux and docker for watcher.#3170Conversation
|
你这基本重写了,重新创建一个 Driver 好了 |
|
我重新创建了新的热更新驱动,命名为NewerFileDriver。之前的修改到FindDriver.php的代码都还原了。 |
FindNewerDriver which is friendly with mac, linux and docker for watcher.
|
@windawake @limingxinleo |
可以啊,你帮忙写一个inotify driver吧 |
|
@limingxinleo 我是写了,但是我发现似乎监听不到,是不是因为我的开发目录在宿主的目录下? |
|
@jinmarcus 我按着官网docker下开发教程下载7.4-alpine-v3.11-swoole镜像并且运行,在容器里执行 我本地试了一下,hyperf/hyperf:latest的镜像里使用php7.2.33版本,无法加载hyperf2.1框架 |
@jinmarcus inotifyDriver开发起来有难度,首先php要安装inotify扩展。个人感觉可以尝试利用 |
|
@windawake 我现在主要遇到的问题就是,我在windows下的docker开发,docker的开发目录使用的是宿主目录,就是映射出来的windows目录, 就是使用下面这条命令创建的环境 而官方提供的ScanFileDriver 就是很粗暴的每隔2秒把所有被监控的文件全部读取并判断md5是否有更新,然后热更新,这倒是能解决这个问题,就是感觉效率并不高。修改了文件后,往往需要2-3秒后才有反应,然后全部热更新的时间,有时候会达到7-8秒甚至更长时间,监控的文件越多,等待的时间就越长。 |
|
@jinmarcus 今天我家里的i5-9400F+24G的台式电脑安装了Windows 10 20H2专业版系统,执行 use Hyperf\Watcher\Driver\FindNewerDriver;
return [
'driver' => FindNewerDriver::class,
'bin' => 'php',
'watch' => [
'dir' => ['app', 'config', 'vendor'],
'file' => ['.env'],
'scan_interval' => 2000,
],
];自测的结果是大部分都能实现热更新,很少会出现热更新失败。如果热更新失败的话,可以采用多次按 |
做了三方面的升级
find %s -newer %s -type f的语法,支持docker,linux和mac等系统。/tmp创建两个文件,切换更改和扫描的步骤,使查找的文件更加准确,同时删除$fileModifyTimes全局变量,降低内存消耗。