- PVSM.RU - https://www.pvsm.ru -
Исторически сложилось, что скрипты на 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/
Нажмите здесь для печати.