webentwicklung-frage-antwort-db.com.de

Was ist der Sinn von uWSGI?

Ich schaue auf die WSGI-Spezifikation und versuche herauszufinden, wie Server wie WSGI in das Bild passen. Ich verstehe, dass der Sinn der WSGI-Spezifikation darin besteht, Webserver wie Nginx von Webanwendungen wie etwas zu trennen, das Sie mit Flask schreiben würden. Was ich nicht verstehe, ist, wofür uWSGI ist. Warum kann nginx meine Flask Anwendung nicht direkt aufrufen? Kann nicht flask WSGI direkt mit ihr sprechen? Warum muss uWSGI dazwischen kommen?

Die WSGI-Spezifikation enthält zwei Seiten: den Server und die Web-App. Auf welcher Seite steht uWSGI?

67
d512

Okay, ich glaube ich verstehe das jetzt.

Warum kann nginx meine Flask Anwendung nicht direkt aufrufen?

Weil nginx die WSGI-Spezifikation nicht unterstützt. Technisch gesehen könnte Nginx die Spezifikation WSGI implementieren, wenn sie dies wünscht.

In diesem Fall benötigen wir einen Webserver, der die Spezifikation implementiert, wofür der Server uWSGI vorgesehen ist.

Beachten Sie, dass uWSGI ein vollwertiger http-Server ist, der für sich alleine gut funktioniert. Ich habe es in dieser Eigenschaft mehrmals benutzt und es funktioniert großartig. Wenn Sie einen besonders hohen Durchsatz für statische Inhalte benötigen, haben Sie die Möglichkeit, nginx vor Ihren uWSGI Server zu stellen. In diesem Fall kommunizieren sie über ein Protokoll auf niedriger Ebene, das als uwsgi bezeichnet wird.

"Was zum Teufel ?! Noch etwas namens uwsgi ?!" fragen Sie. Ja, es ist verwirrend. Wenn Sie auf uWSGI verweisen, sprechen Sie von einem http-Server. Wenn Sie von uwsgi (nur in Kleinbuchstaben) sprechen, sprechen Sie von einem binären Protokoll , dass der uWSGI Server verwendet, um mit anderen Servern wie nginx zu sprechen. Sie haben einen schlechten Namen für diesen ausgewählt.

Für alle, die daran interessiert sind, habe ich einen Blog-Artikel geschrieben, der weitere Einzelheiten, ein bisschen Geschichte und einige Beispiele enthält.

90
d512

Ein herkömmlicher Webserver kann Python -Anwendungen nicht ausführen. Das ist der Grund, warum WSGI-Server hereinkommen. Auf der anderen Seite unterstützt Nginx Reverse-Proxy, um Anfragen zu bearbeiten und Antworten an Python WSGI-Server weiterzuleiten.

Dieser Link könnte Ihnen helfen: https://www.fullstackpython.com/wsgi-servers.html

16
Rafiqul Hasan

NGINX funktioniert in diesem Fall nur als Reverse-Proxy, es empfängt die Anforderungen und leitet sie an den Anwendungsserver weiter, das wäre UWSGI.

Der UWSGI-Server ist dafür verantwortlich, dass Ihre Flask) -Anwendung über die WSGI-Schnittstelle geladen wird. Sie können UWSGI tatsächlich veranlassen, direkt auf Anfragen aus dem Internet zu hören und NGINX zu entfernen, wenn Sie möchten, obwohl dies meistens hinter einer umgekehrten Methode verwendet wird Proxy.

Aus dem docs :

uWSGI unterstützt verschiedene Methoden zur Integration in Webserver. Es ist auch in der Lage, HTTP-Anforderungen selbst zu bedienen.

WSGI ist nur eine Schnittstellenspezifikation. Sie gibt Ihnen in einfachen Worten Aufschluss darüber, welche Methoden zum Weiterleiten von Anforderungen und Antworten zwischen dem Server und der Anwendung implementiert werden sollten. Bei der Verwendung von Frameworks wie Flask oder Django wird dies vom Framework selbst erledigt.

Mit anderen Worten, WSGI ist im Grunde ein Vertrag zwischen python) Anwendungen (Flask, Django usw.) und Webservern (UWSGI, Gunicorn usw.) Der Vorteil ist, dass Sie Webserver mit wenig Aufwand ändern können Aufwand, weil Sie wissen, dass sie der WSGI-Spezifikation entsprechen, die tatsächlich eines der Ziele ist, wie in PEP-3 angegeben.

Python bietet derzeit eine Vielzahl von Webanwendungs-Frameworks wie Zope, Quixote, Webware, SkunkWeb, PSO und Twisted Web, um nur einige zu nennen [1]. Diese große Auswahl kann für neue Python) Benutzer ein Problem sein, da die Auswahl des Web-Frameworks im Allgemeinen die Auswahl der verwendbaren Webserver einschränkt und umgekehrt.

12
alejandrodnm