Есть ли альтернативы CGI (и действительно ли они мне нужны)?
Вопрос
Я разрабатываю приложение, которое будет состоять из 3-4 служб, которые работают как отдельные процессы и связаны подходящим IPC.У системы будет веб-интерфейс, и я хочу использовать любой веб-сервер, который там есть.
Доступ к веб-интерфейсу должен осуществляться по некоторому URL-адресу, который позволяет другим URL-адресам на одном веб-сервере выполнять совершенно разные действия.Я планирую использовать путь под этим URL-адресом, чтобы указать, что должен делать веб-интерфейс.Он имеет возможности для использования другими приложениями через сеть и для взаимодействия людей в браузере.
Внезапно я бы работал следующим образом:
- заставить веб-сервер запускать процесс CGI для каждого получаемого запроса (например, SetHandler в Apache)
- позвольте CGI подключиться к IPC
- позвольте ему получить все, что ему нужно, от серверных служб
- пусть CGI возвращает HTML/XML и любой статус HTTP на основе ответов служб
Теперь, чего я действительно хочу, так это избежать первых двух шагов, или, если я не могу, избежать второго, потому что я боюсь, что я трачу производительность на ненужные накладные расходы (запросы, поступающие от других приложений, могут быть частыми). ).
PHP, например, может открывать постоянные соединения с базой данных MySQL, которые сохраняются во время выполнения сценария и их не нужно создавать заново в следующий раз, хотя я не знаю, как они на самом деле это делают.Кроме того, насколько я понимаю, модули Apache загружаются один раз при запуске сервера, так что это может удалить первый шаг, но привяжет меня к Apache.
Итак, каковы хорошие способы подключить обработчик определенных URL-адресов к различным веб-серверам?Я не хочу обрабатывать HTTP, иначе я мог бы просто использовать настройку прокси-сервера для второго сервера, но это похоже на изобретение велосипеда.Если вы считаете, что с CGI все в порядке, и у вас есть примеры обработки большого количества запросов аналогичной структуры, дайте мне знать.
Решение
Хорошо, я упустил это раньше.Объяснение моего вопроса здесь привело меня к нему:
Вместо создания нового процесса для каждого запроса FastCGI может использовать один постоянный процесс, который обрабатывает множество запросов за время своего существования.-- Википедия:FastCGI
Другие советы
Даже при умеренных нагрузках CGI остается довольно немасштабируемым зверем.FastCGI — это вариант, но вы, вероятно, также найдете пакет mod_XXXX, где XXXX — это название вашего языка.Например, есть моды для Ruby, Perl и Python и, возможно, еще несколько других.