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 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.

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.