Что такое WSGI и CGI на простом английском языке?


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

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

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

4 92

4 ответа:

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

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

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

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

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

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

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

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

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

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

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

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

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

так ЧТО ТАКОЕ WSGI?

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

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

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

Итак, у вас есть это - серверы будут серверами, а программное обеспечение будет программным обеспечением, и вот способ, которым они могут отлично ладить без необходимости делать какие-либо скидки на специфику другого. Это WSGI.

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

Что касается CGI.... спросите кого-нибудь еще: -)

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

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

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