Приклад простого fastcgi-сервера і fastcgi-кліентаperl, assembler, сі - блог програміста, perl,

FastCGI-сервер на основі POE :: Component :: FastCGI і FastCGI-клієнт на основі FCGI :: Client

Що таке CGI

CGI - це стандарт, який описує, як сервер повинен запускати CGI-скрипт, як повинен передавати йому параметри HTTP-запиту, як CGI-скрипт повинен передавати результати своєї роботи сервера.

При роботі з CGI, web-сервер для обробки кожного запиту створює новий процес.

Щоб передати CGI-скрипту інформацію про надійшов запиті, web-сервер перед запуском скрипта створює для нього спеціальні змінні оточення і записує в них всю інформацію про поточний запиті.

CGI-скрипт отримує доступ до значень всіх змінних через функції операційної системи, тим самим CGI-скрипт отримує вичерпну інформацію про запит. Тіло запиту (якщо воно є) надходить на STDIN (стандартний потік введення) скрипта і має розмір - CONTENT_LENGTH байт.

Якщо CGI-скрипт хоче послати щось у відповідь, то він відправляє всі дані, що виводяться в STDOUT скрипта. Необхідно обов'язково вказати CGI-заголовок (поля Content-Type. Location. Status), порожній рядок, яка відділяє заголовок від тіла відповіді, і саме тіло відповіді, тип якого був вказаний в Content-Type.

Web-сервер, отримавши через STDOUT відповідь від CGI-скрипта, формує HTTP-відповідь і відправляє його клієнту.

Що таке FastCGI

На відміну від CGI, FastCGI використовує постійно запущені процеси для обробки безлічі запитів.

CGI-програми взаємодіють з сервером через STDIN і STDOUT запущеного процесу.

FastCGI-процеси використовують для зв'язку з сервером Unix Domain Sockets або TCP / IP. Це дає наступне перевагу над звичайними CGI-програмами: FastCGI-програми можуть бути запущені не тільки на цьому ж сервері, але і де завгодно в мережі. Також можлива обробка запитів кількома FastCGI-процесами, що працюють паралельно. Можна використовувати кілька FastCGI-серверів, розподіляючи навантаження між ними за допомогою nginx або lighttpd.

Після встановлення з'єднання FastCGI-процесу з web-сервером, між ними починається обмін даними, з використанням простого протоколу, вирішального два завдання: організація двонаправленого обміну в рамках одного з'єднання (для емуляції STDIN, STDOUT, STDERR) і організація декількох незалежних FastCGI-сесій в рамках одного з'єднання.

Всі дані, що передаються обертаються в FastCGI-записи - одиницю даних протоколу. FastCGI-записи служать для організації двонаправленого обміну і мультиплексування декількох сесій в рамках одного з'єднання.

FastCGI-запис складається з заголовка фіксованої довжини, наступного за ним вмісту і вирівнюють даних змінної довжини. Кожен запис містить 7 елементів.

Приклад простого FastCGI-сервера на основі POE-компоненти - POE :: Component :: FastCGI

Що робить FastCGI-сервер? Він постійно слухає заданий порт на предмет отримання нових запитів від web-сервера, розпаковує запис і обробляє запит. Потім відправляє відповідь назад. Web-сервера залишається тільки додати http-заголовки і відправити відповідь клієнту.