143 votes

Quel est le but de uWSGI?

Je suis à la recherche à la WSGI spécification et je suis à essayer de comprendre comment des serveurs comme uWSGI être dans la photo. Je comprends le point de la WSGI spec est de séparer les serveurs web comme nginx à partir d'applications web comme quelque chose que vous voulez écrire à l'aide de Flacon. Ce que je ne comprends pas est ce que uWSGI est pour. Pourquoi ne peut-nginx appeler directement mon Flacon d'application? Ne peut pas fiole de parler WSGI directement? Pourquoi ne uWSGI besoin pour passer entre eux?

Il y a deux côtés dans le WSGI spec: le serveur et l'application web. De quel côté est le uWSGI sur?

180voto

user1334007 Points 1088

Bon, je crois que j'ai trouvé cela maintenant.

Pourquoi ne peut-nginx appeler directement mon Flacon d'application?

Parce qu' nginx ne prend pas en charge le WSGI spec. Techniquement nginx pourrait mettre en œuvre l' WSGI spec si elles le voulaient, ils n'ont tout simplement pas.

Cela étant le cas, nous avons besoin d'un serveur web qui n'mettre en œuvre la spécification, qui est ce que l' uWSGI serveur est pour.

Notez que uWSGI est à part entière un serveur http qui peuvent et qui fait bien travailler sur son propre. Je l'ai utilisé dans cette capacité plusieurs fois et il fonctionne très bien. Si vous avez besoin de super haut débit pour le contenu statique, alors vous avez la possibilité de coller nginx devant votre uWSGI serveur. Lorsque vous le faites, ils vont communiquer sur un faible niveau de protocole uwsgi.

"Qu'est-ce que?! Un autre truc qui s'appelle uwsgi?!" vous vous posez. Ouais, c'est déroutant. Lorsque vous référencez uWSGI vous parler d'un serveur http. Quand vous parlez uwsgi (en minuscules) vous parlez d'un protocole binaire que l' uWSGI serveur utilise pour parler à d'autres serveurs comme nginx. Ils ont choisi un mauvais nom sur celui-ci.

Pour tous ceux qui sont intéressés, j'ai écrit un article de blog à ce sujet avec plus de détails, un peu d'histoire, et quelques exemples.

32voto

alejandrodnm Points 2231

NGINX dans ce cas, ne fonctionne que comme un proxy inverse, il reçoit les demandes et les doublures au serveur d'application, qui serait UWSGI.

Le UWSGI serveur est responsable du chargement de votre ballon d'application à l'aide de l'interface WSGI. Vous pouvez réellement faire de UWSGI écouter directement aux demandes de l'internet et de supprimer NGINX si vous le souhaitez, mais il est surtout utilisé derrière un reverse proxy.

À partir de la docs:

uWSGI prend en charge plusieurs méthodes d'intégration avec les serveurs web. Il est également capable de servir les requêtes HTTP par lui-même.

WSGI est juste une spécification d'interface, en termes simples, il vous indique quelles méthodes doivent être mises en œuvre pour le passage de requets et les réponses entre le serveur et l'application. Lors de l'utilisation de frameworks comme le ballon ou Django, c'est gérer par le cadre lui-même.

En d'autres termes, WSGI est essentiellement un contrat entre python applications (Flacon, Django, etc) et les serveurs web (UWSGI, Gunicorn, etc). L'avantage est que vous pouvez changer de serveurs web avec peu d'effort, parce que vous savez qu'ils respectent les WSGI cahier des charges, qui est en fait l'un des buts, comme indiqué dans le PEP-333.

Python actuellement se vante d'une large variété de frameworks d'applications web, telles que Zope, Quichotte, Webware, SkunkWeb, PSO, et Twisted Web, pour n'en nommer juste quelques-uns [1]. Cette grande variété de choix peut être un problème pour les nouveaux Python, parce que de manière générale, leur choix de framework web va limiter le choix de leurs utilisable serveurs web, et vice-versa

29voto

Rafiqul Hasan Points 223

Un serveur Web traditionnel ne comprend pas ou n'a aucun moyen d'exécuter des applications Python. C'est pourquoi le serveur WSGI entre en jeu. D'autre part, Nginx prend en charge le proxy inverse pour gérer les demandes et transmettre les réponses aux serveurs WSGI Python.

Ce lien pourrait vous aider: https://www.fullstackpython.com/wsgi-servers.html

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X