Pull to refresh
64
0
Сергей Жук @seregazhuk

Пользователь

Send message

Спасибо!
Про произношение согласен… стараюсь. Иногда перезаписываю какие-то фразы, пользуюсь youglish.com для слов/фраз в которых не уверен. В общем есть ещё куда развиваться)

Да, сайт ещё пока в разработке. Доступен пока только фреймворк и демо приложение.

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

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

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

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

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

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

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


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

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

Похоже наверно только тем, что рестартуется приложение. Здесь была идея слушать изменения в файлах и если они есть, то рестартовать. Кроме того, если слушаемое приложение упало (зафейлилось или просто выполнилось), то оно автоматически не рестартуется. Считаем, что это процесс разработки и здесь «нормально», если приложение упало. Как только будут внесены изменения в исходный код, watcher их обнаружит и перезапустит приложение.
Это понятно, но для его установки нужен NodeJs и npm. Не хочется стек PHP-приложения усложнять Node-зависимостями.
Это же для NodeJs. Изначальная идея была — получить что-то на чистом PHP, что можно было бы добавить в проект через Composer.
Если развёрнуто, то у меня сейчас уже больше 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 и оплата свободно прошла.
2

Information

Rating
Does not participate
Location
Брянск, Брянская обл., Россия
Date of birth
Registered
Activity