Комментарии 22
Жалко только, что о многопоточности пока речи не идет, умело бы оно в потоки, цены бы ему небыло.
Так это же PHP, здесь не будет многопоточности. А какой хотелось бы кейс, чтобы была многопоточность? У меня идея была просто рестартовать запущенное приложение при изменении его исходников.
Я все таки думал что он еще умеет жить как event-loop.
Так он и живет как event-loop. А что Вы ожидали? Какое поведение?
Хотелось бы больше конкретики в плане описания принципов внутренней работы. Правильно я понимаю что вотчер следит за изменениями в дате модификации файла и каким-то образом производит рестарт уже запущенного процесса?
Под капотом консольная команда запускает 2 дочерних процесса:
- скрипт, который слушает изменения в файловой системе. Для этого используется Symfony Finder Component
- самое приложение, которое нужно рестартовать
Всё это управляется асинхронно на ReactPHP. Как только мы получаем сигнал от дочернего процесса, что файловая система была изменена, мы перезапускаем процесс с приложением.
Уточню, что для поиска изменений в файловой системе используется yosymfony/resource-watcher.
www.php.net/manual/ru/splfileinfo.getmtime.php
это обертка над filemtime()
Замечание: Результаты этой функции кешируются.
Вопрос. Вы clearstatcache() вызываете?
Не вызываю. Извинюясь, я не совсем корректно описал принцип работы. Именно для поиска изменений на диске используется yosymfony/resource-watcher. А Symfony Finder используется лишь, чтобы задать критерию для поиска изменений.
Хотелось решения на чистом PHP, чтобы можно было вызвать composer install
и начать работать. С inotify мне нужно устанавливать дополнительные пакеты в систему.
Вы же симфони целое сюда прикрутили, а одного пакета не хотите.
Просто дергать файловую систему вместо того чтобы ждать нужного события как бы экстенсивно. Это все равно вместо того чтобы использовать select/poll на сокетах пытаться все время из них что-то прочитать.
Тулза для мониторинга должна потреблять минимум ресурсов. А у Вас файловую систему зря грузит.
PHP-Watcher: инструмент, который упрощает разработку долгоживущих приложений