Есть ли альтернативы CGI (и действительно ли я нужен)? - PullRequest
2 голосов
/ 26 сентября 2008

Я разрабатываю приложение, которое будет состоять из 3-4 сервисов, которые выполняются как отдельные процессы и связаны между собой подходящим IPC. Система будет иметь веб-интерфейс, и я хочу использовать любой веб-сервер.

Веб-интерфейс должен быть доступен по некоторому URL-адресу, что позволяет другим URL-адресам на одном веб-сервере выполнять совершенно разные действия. Я планирую использовать путь под этим URL, чтобы указать, что должен делать веб-интерфейс. Он имеет возможности для использования другими приложениями в сети и для взаимодействия людей в браузере.

С манжеты я бы работал следующим образом:

  • заставить веб-сервер запускать процесс CGI для каждого получаемого им запроса (например, SetHandler в Apache)
  • пусть CGI подключается к IPC
  • пусть он получает все, что ему нужно от бэкэнд-сервисов
  • пусть CGI возвращает HTML / XML и любой статус HTTP, основанный на ответах служб

Теперь, что я действительно хочу, это избежать первых двух шагов, или, если я не могу, избежать второго, потому что я боюсь, что трачу впустую производительность на ненужные накладные расходы (запросы, поступающие из других приложений может быть частым).

PHP, например, может открывать постоянные соединения с базой данных MySQL, которые выживают во время выполнения скрипта и не нуждаются в воссоздании в следующий раз, хотя я не знаю, как они на самом деле это делают. Кроме того, насколько я понимаю, модули Apache загружаются один раз при запуске сервера, так что это может удалить первый шаг, но привязать меня к Apache.

Итак, каковы хорошие способы подключить обработчик для определенных URL-адресов к различным веб-серверам? Я не хочу обрабатывать HTTP, иначе я мог бы просто использовать настройку прокси-сервера для второго сервера, но это, кажется, просто изобретает за рулем. Если вы думаете, что CGI в порядке и есть примеры, когда он обрабатывает большое количество запросов аналогичной структуры, пожалуйста, дайте мне знать.

Ответы [ 2 ]

4 голосов
/ 26 сентября 2008

ОК, я упустил это из виду ранее. Объяснение моего вопроса привело меня к этому:

Вместо того, чтобы создавать новый процесс для каждого запроса, FastCGI может использовать один постоянный процесс, который обрабатывает много запросов в течение своего срока службы. - Википедия: FastCGI

3 голосов
/ 26 сентября 2008

Даже при умеренных нагрузках, CGI - довольно неприличный зверь. FastCGI - вариант, но вы, вероятно, также найдете пакет mod_XXXX, где XXXX - это название вашего языка. Например, есть мод для ruby, perl и python и, вероятно, немало других.

...