WebRotor — это PHP библиотека с помощью которой можно использовать асинхронное выполнение приложения на общем хостинге. Как известно, shared hosting обладает множеством ограничений по использованию, но такая специализированная программа дает все преимущества асинхронности и на общем хостинге.
Принцип работы WebRotor в том, что при обращении к приложению индексный файл не обрабатывает запросы, а только посылает воркерам и забирает обратно для отображения. При этом в качестве воркера используется код этого же индексного файла. В качестве воркеров выступают обычные CRON-подобные процессы, имеющиеся сейчас на каждом хостинге. Разница настройки этих воркеров только в различии дизайна административной панели хостинга.
Для правильной работы приложения, запущенного при помощи этой технологии, оно должно быть разработано с поддержкой асинхронного режима.
В асинхронном режиме переиспользуются загруженные конфигурации фреймворка, классы, инициализированные сервисы, кешированные данные, что значительно ускоряет работу.
Но вместе с этим есть характерные особенности, такие как необходимость больше следить за утечками памяти и устранять блокирующие операции, также многие из привычных сторонних библиотек не поддерживают асинхронный режим.
Хранение состояния (state) в логических частях приложения становится нежелательным, особенно, если оно связано с запросом.
Интерфейс RollbackInterface фреймворка предназначен для сброса состояния после каждого асинхронного запроса.
Для WebRotor необходимо будет изменить файл /public_html/index.php (предполагаемый путь к индексному файлу на общем хостинге), чтобы фреймворк HLEB2 выполнялся в цикле. Базовый рабочий пример:
В данном коде используется HTTP-клиент nyholm/psr7 и nyholm/psr7-server, которые нужно установить дополнительно.
Для такой конфигурации нужно еще будет запустить "воркеры" на хостинге, которые на самом деле предоставляемые хостингом CRON-подобные процессы. Обычно они настраиваются в административной панели хостинга и имеют различный дизайн, но принцип у них будет один. Нужно запустить два обработчика с интервалом в две минуты (в соответствии с настройками указанными выше):
*/2 * * * * /usr/local/bin/php7.2 /my-project/public_html/index.php --id=1
*/2 * * * * /usr/local/bin/php7.2 /my-project/public_html/index.php --id=2
Два этих процесса отличаются только номером ID для воркера. После этого все запросы, поступающие к приложению будут обрабатываться двумя асинхронными воркерами.
Подробнее в описании библиотеки: github.com/phphleb/webrotor
Для локальной разработки можно не использовать запуск воркеров, так как если они не запущены или неактивны, то запрос будет выполняться в обычном порядке. Таким образом, локально будут доступны стандартные средства отладки, такие как xDebug.
← Shared hosting Маршрутизация →