...

воскресенье, 8 февраля 2015 г.

WSGI/Rack для PHP

Исторически сложилось, что скрипты на PHP запускаются при каждом HTTP-запросе. Запускаясь, скрипт проводит какую-то инициализацию (например, устанавливает соединение с СУБД), после чего анализирует запрос и формирует ответ. Однако, всем прекрасно известно, что в мире Python и Ruby принят другой подход: веб-приложения на этих языках загружаются в память единовременно вместе с веб-сервером (или сервером приложений). Взаимодействие сервера приложений со скриптом осуществляется при помощи стандартных интерфейсов WSGI и Rack. Такой подход, безусловно, не лишён недостатков, главный из которых, пожалуй, связан с резким ростом накладных расходов при размещении большого числа сайтов на одном сервере, однако, обладает и важным преимуществом: инициализация производится лишь однократно, затем скрипт лишь отвечает на входящие HTTP-запросы.

Попытки перенести цикл обработки запросов в тело PHP-сценария уже производились, при этом удавалось добиться значительного роста производительности. Однако, для этого приходилось писать достаточно много кода.


Однако, буквально на днях создатели uWSGI реализовали экспериментальную поддержку интерфейса, схожего с WSGI/Rack, для PHP. Я напомню, что uWSGI — чрезвычайно гибкий и функциональный сервер приложений, поддерживающий практически все существующие на сегодняшний день языки и технологии, который легко может быть использован как альтернатива PHP-FPM. Таким образом, появилась возможность создания веб-приложений, постоянно загруженных в память, куда меньшей кровью.


Интерфейс назван «phpsgi». Плагин, реализующий поддержку этого интерфейса, ещё пока достаточно сыроват, однако, разработчик уже изъявил желание показать его широкой общественности.



But i will absolutely ask you for tests/reports and for gathering people willing to try it :)



Установка плагина при наличии уже настроенного uWSGI предельно проста:



uwsgi --build-plugin http://ift.tt/1M2OtI9

После выполнения такой команды в текущем каталоге появится файл «phpsgi_plugin.so», который достаточно поместить в каталог с остальными плагинами сервера (обычно /usr/lib/uwsgi). После этого можно настроить вассала (виртуальный узел), либо запустить экземпляр uWSGI вручную. Для простоты рассмотрим второй вариант.



uwsgi --plugin phpsgi --http-socket :9090

Если выполнить такую команду, uWSGI обратится к файлу с именем «app.php», который должен содержать в себе функцию «application». На данный момент, так как плагин является экспериментальным, эти имена жёстко определены в коде. Рассмотрим простейший пример кода на PHP, который можно «скормить» этому плагину.


Комментариев нет:

Отправить комментарий