Что такое WSGI и CGI на простом английском языке? - PullRequest
116 голосов
/ 08 февраля 2011

Каждый раз, когда я читаю либо WSGI, либо CGI, я съеживаюсь. Я пытался читать на нем раньше, но на самом деле ничего не застряло.

Что на самом деле на простом английском?

Он просто передает запросы в терминал и перенаправляет вывод?

Ответы [ 4 ]

229 голосов
/ 25 февраля 2011

С точки зрения полной отдачи, Бланкмен, вот моя «вступительная страница» для интерфейса шлюза веб-служб:

ЧАСТЬ ПЕРВАЯ: ВЕБ-СЕРВЕРЫ

Веб-серверы обслуживают ответы.Они сидят без дела, терпеливо ожидая, а затем внезапно, без предупреждения:

  • клиентский процесс отправляет запрос.Клиентский процесс может быть веб-сервером, ботом, мобильным приложением, чем угодно.Это просто «клиент»
  • веб-сервер получает этот запрос
  • преднамеренное бормотание происходят разные вещи (см. Ниже)
  • Веб-сервер отправляетвернуть что-то клиенту
  • веб-сервер снова сидит

Веб-серверы (по крайней мере, лучшие) очень ОЧЕНЬ хороши в этом.Они увеличивают и уменьшают объем обработки в зависимости от спроса, они надежно поддерживают разговоры с самыми ненадежными клиентами по действительно грубым сетям, и нам никогда не приходится беспокоиться об этом.Они просто продолжают обслуживать.

Это моя точка зрения: веб-серверы - это просто серверы.Они ничего не знают о контенте, ничего о пользователях, фактически ничего, кроме как ждать много и надежно отвечать.

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

ЧАСТЬ ВТОРАЯ: (PYTHON) ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ

Программное обеспечение не работает.Программное обеспечение существует только во время выполнения.Программное обеспечение не очень удобно, когда дело доходит до неожиданных изменений в его среде (файлы не находятся там, где его ожидают, параметры переименовываются и т. Д.).Хотя оптимизация должна быть главным принципом вашего дизайна (конечно), само программное обеспечение не оптимизирует.Разработчики оптимизируют.Программное обеспечение выполняется.Программное обеспечение делает все вещи в разделе «преднамеренное бормотание» выше.Может быть что угодно.

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

Это где традиционный метод "компиляции в«Языки для веб-серверов становятся болезненными.Вы заканчиваете тем, что помещаете код в свое приложение, чтобы справиться с физической серверной средой или, по крайней мере, вынуждены выбирать подходящую библиотеку «обертку» для включения во время выполнения, чтобы создать иллюзию единообразия между веб-серверами.

ТАК ЧТО ТАКОЕ WSGI?

Итак, наконец, что такое WSGI?WSGI - это свод правил , написанный в две половины.Они написаны таким образом, что их можно интегрировать в любую среду, которая приветствует интеграцию.

Первая часть, написанная для веб-сервера, говорит: «Хорошо, если вы хотите иметь дело с приложением WSGI,Вот как будет думать программное обеспечение при загрузке. Вот то, что вы должны сделать доступным для приложения, и вот интерфейс (макет), который вы можете ожидать от каждого приложения. Более того, если что-то пойдет не так, вот какприложение будет думать, и как вы можете ожидать, что оно будет вести себя ».

Вторая часть, написанная для прикладного программного обеспечения Python, говорит:« Хорошо, если вы хотите иметь дело с сервером WSGI, вот как сервер будетдумайте, когда он связывается с вами. Вот то, что вы должны сделать доступным для сервера, а вот интерфейс (макет), который вы можете ожидать от каждого сервера. Более того, если что-то пойдет не так, вот как вы должны себя вести, и вотчто вы должны сказать серверу. "

Так что у вас есть - serВерсии будут серверами, а программное обеспечение будет программным, и вот способ, которым они могут прекрасно справляться друг с другом, не принимая во внимание специфику другого.Это WSGI.

mod_wsgi, с другой стороны, является плагином для Apache, который позволяет ему общаться с WSGI-совместимым программным обеспечением, другими словами, mod_wsgi является реализацией - в Apache - правилчасть первая из приведенного выше правила.

Что касается CGI .... спросите кого-то еще: -)

59 голосов
/ 08 февраля 2011

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

CGI запускает скрипт как отдельный процесс для каждого запроса и использует переменные окружения, stdin и stdout для «связи» с ним.

18 голосов
/ 30 марта 2012

Если вам непонятно все термины в этом пространстве, и давайте посмотрим правде в глаза, это запутанный акроним, есть также хороший фоновый читатель в виде официального питона HOWTO , в котором обсуждаетсяCGI против FastCGI против WSGI и так далее.Хотел бы я сначала прочитать это.

18 голосов
/ 08 февраля 2011

И CGI, и WSGI определяют стандартные интерфейсы, которые программы могут использовать для обработки веб-запросов.Интерфейс CGI находится на более низком уровне, чем WSGI, и включает в себя настройку сервером переменных среды, содержащих данные из HTTP-запроса, при этом программа возвращает что-то отформатированное почти как отклик ответа HTTP-сервера.с другой стороны, это специфичный для Python интерфейс немного более высокого уровня, который позволяет программистам писать приложения, которые не зависят от сервера и могут быть обернуты в другие приложения WSGI (промежуточное ПО).

...