Как стать автором
Обновить

Комментарии 22

НЛО прилетело и опубликовало эту надпись здесь
Это же для NodeJs. Изначальная идея была — получить что-то на чистом PHP, что можно было бы добавить в проект через Composer.
НЛО прилетело и опубликовало эту надпись здесь
Это понятно, но для его установки нужен NodeJs и npm. Не хочется стек PHP-приложения усложнять Node-зависимостями.
Спасибо большое, пока еще не успел посмотреть более детально, но судя по статье, это то, что уже давно было нужно.
Жалко только, что о многопоточности пока речи не идет, умело бы оно в потоки, цены бы ему небыло.

Так это же PHP, здесь не будет многопоточности. А какой хотелось бы кейс, чтобы была многопоточность? У меня идея была просто рестартовать запущенное приложение при изменении его исходников.

Извиняюсь, сейчас глянул подробнее про инструмент, не совсем то, что я ожидал.
Я все таки думал что он еще умеет жить как event-loop.

Так он и живет как event-loop. А что Вы ожидали? Какое поведение?

А какой хотелось бы кейс, чтобы была многопоточность?
Тогда не совсем понятен вопрос, что значит кейс в котором была бы многопоточность? Хотелось бы чтобы любой эвент уходил в поток.

Увидел, код капотом ReactPHP, я все таки надеялся что это альтернатива, вопрос закрыт.
Вы не спутали его с roadrunner?
Похоже наверно только тем, что рестартуется приложение. Здесь была идея слушать изменения в файлах и если они есть, то рестартовать. Кроме того, если слушаемое приложение упало (зафейлилось или просто выполнилось), то оно автоматически не рестартуется. Считаем, что это процесс разработки и здесь «нормально», если приложение упало. Как только будут внесены изменения в исходный код, watcher их обнаружит и перезапустит приложение.

Хотелось бы больше конкретики в плане описания принципов внутренней работы. Правильно я понимаю что вотчер следит за изменениями в дате модификации файла и каким-то образом производит рестарт уже запущенного процесса?

Под капотом консольная команда запускает 2 дочерних процесса:


  • скрипт, который слушает изменения в файловой системе. Для этого используется Symfony Finder Component
  • самое приложение, которое нужно рестартовать

Всё это управляется асинхронно на ReactPHP. Как только мы получаем сигнал от дочернего процесса, что файловая система была изменена, мы перезапускаем процесс с приложением.

Уточню, что для поиска изменений в файловой системе используется yosymfony/resource-watcher.

Не вызываю. Извинюясь, я не совсем корректно описал принцип работы. Именно для поиска изменений на диске используется yosymfony/resource-watcher. А Symfony Finder используется лишь, чтобы задать критерию для поиска изменений.

А inotify + incron почему не устраивает?

Хотелось решения на чистом PHP, чтобы можно было вызвать composer install и начать работать. С inotify мне нужно устанавливать дополнительные пакеты в систему.

так это же пакет пыховский.
Вы же симфони целое сюда прикрутили, а одного пакета не хотите.

Просто дергать файловую систему вместо того чтобы ждать нужного события как бы экстенсивно. Это все равно вместо того чтобы использовать select/poll на сокетах пытаться все время из них что-то прочитать.

Тулза для мониторинга должна потреблять минимум ресурсов. А у Вас файловую систему зря грузит.

Ага, посмотрел уже более детально. Спасибо за идею! Думаю можно сделать несколько реализаций. Проверять если доступно расширение — то использовать его, если нет — то фолбэк на Symfony и дергать файловую систему.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий