- PVSM.RU - https://www.pvsm.ru -

WSGI-Rack для PHP

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

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

Однако, буквально на днях создатели uWSGI реализовали экспериментальную поддержку [4] интерфейса, схожего с 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 https://github.com/unbit/uwsgi-phpsgi

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

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

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

<?php
echo 'Loading';
function application($env) {
    return ['200 OK', ['Content-Type' => 'text/plain'], 'Hello, world!'];
}

Этот пример выведет в браузер строку «Hello, world!», в то время как строка «Loading» будет выведена однократно в журнал вассала uWSGI.

Автор: WST

Источник [5]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/php-2/82090

Ссылки в тексте:

[1] WSGI: https://ru.wikipedia.org/wiki/WSGI

[2] Rack: https://en.wikipedia.org/wiki/Rack_(web_server_interface)

[3] производились: http://javascript.ru/blog/TravisBickle/True-FastCGI-dlya-PHP-migraciya-testy

[4] реализовали экспериментальную поддержку: https://github.com/unbit/uwsgi/issues/832

[5] Источник: http://habrahabr.ru/post/250055/