Автономный веб-сервер Python и / или nginx

#python #nginx #webserver #tornado #bottle

#python #nginx #веб-сервер #торнадо #бутылка

Вопрос:

Итак, я немного почитал о веб-фреймворках Python (или серверах?), в основном о Tornado и Bottle, но также о FAPWS3, и все еще есть некоторые серые области.

Во-первых, все эти три веб-фреймворка считаются быстрыми, но все они включают веб-сервер, написанный на Python (за исключением FAPWS3), который должен быть размещен за nginx / Apache. Не снижает ли это производительность? Я имею в виду, мы знаем, что Python намного медленнее, чем C, почему бы не использовать только nginx или, на худой конец, только включенный веб-сервер Python?

Комментарии:

1. Зачем вам размещать веб-серверы за другим?

2. @IgnacioVazquez-Abrams Это часть вопроса.

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

4. Серверы приложений обычно медленно генерируют ответы (даже статический материал). Обычная настройка заключается в том, чтобы иметь быстрый HTTP-сервер перед кучей серверов приложений. Кроме того, серверам приложений не хватает многих дополнительных функций http-сервера, таких как Apache или nginx.

Ответ №1:

Во-первых, Tornado и FAPWS3 — это веб-серверы, в то время как Bottle — это веб-фреймворк. Они принадлежат к совершенно разным категориям.

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

Идея в основном заключается в том, что HTTP-сервер (Apache / Lighttpd / Nginx / Tornado / FAPWS3 и т.д.) Очень хорошо понимает HTTP и обслуживает статические файлы с диска. Динамический контент, с другой стороны, генерируется сервером Python с использованием веб-фреймворка, такого как Bottle / Flask /web.py/ Pylons / etc. Документ, созданный веб-платформой, затем отправляется обратно на HTTP-сервер через WSGI, помещается в HTTP-ответ и отправляется клиенту.

Комментарии:

1. Спасибо! Когда вы говорите, что динамический контент генерируется сервером Python с использованием фреймворка, не будет ли быстрее, если фреймворк напрямую отправит ответ через WSGI вместо запуска сервера Python? Или так работает WSGI?

2. @seriousdev: WSGI не указывает, как запускается приложение WSGI. Это контролирует контейнер WSGI.