Спасибо!
Про произношение согласен… стараюсь. Иногда перезаписываю какие-то фразы, пользуюсь youglish.com для слов/фраз в которых не уверен. В общем есть ещё куда развиваться)
Ага, посмотрел уже более детально. Спасибо за идею! Думаю можно сделать несколько реализаций. Проверять если доступно расширение — то использовать его, если нет — то фолбэк на Symfony и дергать файловую систему.
Хотелось решения на чистом PHP, чтобы можно было вызвать composer install и начать работать. С inotify мне нужно устанавливать дополнительные пакеты в систему.
Не вызываю. Извинюясь, я не совсем корректно описал принцип работы. Именно для поиска изменений на диске используется yosymfony/resource-watcher. А Symfony Finder используется лишь, чтобы задать критерию для поиска изменений.
Так это же PHP, здесь не будет многопоточности. А какой хотелось бы кейс, чтобы была многопоточность? У меня идея была просто рестартовать запущенное приложение при изменении его исходников.
Под капотом консольная команда запускает 2 дочерних процесса:
скрипт, который слушает изменения в файловой системе. Для этого используется Symfony Finder Component
самое приложение, которое нужно рестартовать
Всё это управляется асинхронно на ReactPHP. Как только мы получаем сигнал от дочернего процесса, что файловая система была изменена, мы перезапускаем процесс с приложением.
Похоже наверно только тем, что рестартуется приложение. Здесь была идея слушать изменения в файлах и если они есть, то рестартовать. Кроме того, если слушаемое приложение упало (зафейлилось или просто выполнилось), то оно автоматически не рестартуется. Считаем, что это процесс разработки и здесь «нормально», если приложение упало. Как только будут внесены изменения в исходный код, watcher их обнаружит и перезапустит приложение.
Если развёрнуто, то у меня сейчас уже больше 30 статей на тему асинхронного PHP и ReactPHP — sergeyzhuk.me/reactphp-series Правда там всё на англ языке.
Поможет, не нужен хардкор) При создании дочерних процессов можно указать их Current working directory. Соответственно достаточно передать её в обработчик запроса:
'/' => function (ServerRequestInterface $request, LoopInterface $loop, $cwd) {
$childProcess = new Process('cat pages/index.html', $cwd);
$childProcess->start($loop);
return new Response(
200, ['Content-Type' => 'text/html'], $childProcess->stdout
);
}
Нет, к сожалению книга опубликована только на leanpub.com. Уже пробовал так с одним читателем делать. Он просто поменял в селекте страну на US и оплата свободно прошла.
Спасибо!
Про произношение согласен… стараюсь. Иногда перезаписываю какие-то фразы, пользуюсь youglish.com для слов/фраз в которых не уверен. В общем есть ещё куда развиваться)
Да, сайт ещё пока в разработке. Доступен пока только фреймворк и демо приложение.
Ага, посмотрел уже более детально. Спасибо за идею! Думаю можно сделать несколько реализаций. Проверять если доступно расширение — то использовать его, если нет — то фолбэк на Symfony и дергать файловую систему.
Хотелось решения на чистом PHP, чтобы можно было вызвать
composer install
и начать работать. С inotify мне нужно устанавливать дополнительные пакеты в систему.Не вызываю. Извинюясь, я не совсем корректно описал принцип работы. Именно для поиска изменений на диске используется yosymfony/resource-watcher. А Symfony Finder используется лишь, чтобы задать критерию для поиска изменений.
Уточню, что для поиска изменений в файловой системе используется yosymfony/resource-watcher.
Так он и живет как event-loop. А что Вы ожидали? Какое поведение?
Так это же PHP, здесь не будет многопоточности. А какой хотелось бы кейс, чтобы была многопоточность? У меня идея была просто рестартовать запущенное приложение при изменении его исходников.
Под капотом консольная команда запускает 2 дочерних процесса:
Всё это управляется асинхронно на ReactPHP. Как только мы получаем сигнал от дочернего процесса, что файловая система была изменена, мы перезапускаем процесс с приложением.
Current working directory
. Соответственно достаточно передать её в обработчик запроса: