UWSGI'nin amacı nedir?


97

WSGI spesifikasyonuna bakıyorum ve uWSGI gibi sunucuların resme nasıl uyduğunu anlamaya çalışıyorum . WSGI spesifikasyonunun amacının, Flask kullanarak yazdığınız bir şey gibi web uygulamalarından nginx gibi web sunucularını ayırmak olduğunu anlıyorum . Anlamadığım şey, uWSGI'nin ne için olduğu. Nginx neden Flask başvurumu doğrudan arayamıyor? Flask, WSGI ile doğrudan konuşamıyor mu? UWSGI neden aralarına girmeye ihtiyaç duyar?

WSGI spesifikasyonunun iki tarafı vardır: sunucu ve web uygulaması. UWSGI hangi tarafta?

Yanıtlar:


131

Tamam, sanırım şimdi anladım.

Nginx neden Flask başvurumu doğrudan arayamıyor?

Çünkü nginxWSGI özelliklerini desteklemiyor. Teknik olarak nginx WSGIisterlerse spesifikasyonu uygulayabilirdi, sadece yapmadılar.

Bu durumda, spesifikasyonu uygulayan bir web sunucusuna ihtiyacımız var, ki bu uWSGIsunucu bunun içindir.

uWSGIKendi başına iyi çalışabilen ve çalışan tam teşekküllü bir http sunucusu olduğunu unutmayın . Bu kapasitede birkaç kez kullandım ve harika çalışıyor. Statik içerik için süper yüksek işleme hızına ihtiyacınız varsa nginx, uWSGIsunucunuzun önüne takılma seçeneğiniz vardır . Bunu yaptığınızda, olarak bilinen düşük seviyeli bir protokol üzerinden iletişim kuracaklar uwsgi.

"Ne ne ?! Uwsgi denen başka bir şey mi ?!" sen sor. Evet, kafa karıştırıcı. Referans verdiğinizde uWSGIbir http sunucusundan bahsediyorsunuz. Hakkında konuştuğunuzda uwsgi(tümü küçük harf) , sunucunun diğer sunucularla konuşmak için kullandığı ikili bir protokolden bahsediyorsunuz . Bu sefer kötü bir isim seçtiler.uWSGI nginx

İlgilenen herkes için, onunla ilgili daha ayrıntılı, biraz tarih ve bazı örnekler içeren bir blog yazısı yazdım .


4
Flask uygulamalarını HTTP sunucusu olarak Werkzeug ile çalıştırmak mümkündür, ancak bu, üretime hazır kurulum değildir. uWSGI birden fazla sorunu çözer: * HTTP ayrıştırma (C'de daha hızlı) ve WSGI uygulamasıyla arayüz oluşturma *, uygulamayı daha iyi eşzamanlılık için birden çok işlemde / iş parçacığında başlatır *, WSGI uygulamalarının gözetmeni olarak görev yapar
Sergey Panfilov

@SergeyPanfilov sorun şu ki uwsgi'nin flask ile nasıl başa çıktığını bilmiyoruz, her işlem / iş parçacığı flask uygulamasının bir örneğini oluşturdu? Flask-Executor gibi flask'ta arka plan görevi için bazı uygulamalar gördüm ve bir isteğin içinde bağlanması gerekiyor. Bağlamın dışında bir yer olamaz.
TomSawyer

Hasan'ın cevabını okuyun .. doğru cevaba yakın ..... http sunucuları çoğunlukla C ile yazılır ve http isteklerini python arka
uçlarına iletemezler

25

Bu durumda NGINX yalnızca bir ters proxy olarak çalışır ve dinamik dosyaları değil statik dosyaları oluşturur , istekleri alır ve bunları uygulama sunucusuna yani UWSGI'ye proxy yapar.

UWSGI sunucusu, WSGI arayüzünü kullanarak Flask uygulamanızı yüklemekten sorumludur. Aslında UWSGI'nin internetten gelen istekleri doğrudan dinlemesini sağlayabilir ve isterseniz NGINX'i kaldırabilirsiniz, ancak çoğunlukla ters proxy arkasında kullanılır.

Gönderen docs :

uWSGI, web sunucularıyla entegrasyon için çeşitli yöntemleri destekler. Ayrıca kendi başına HTTP isteklerine hizmet verebilir.

WSGI sadece bir arayüz belirtimidir, basit bir ifadeyle, sunucu ile uygulama arasında istekleri ve yanıtları iletmek için hangi yöntemlerin uygulanması gerektiğini size söyler. Flask veya Django gibi çerçeveler kullanıldığında, bu çerçevenin kendisi tarafından ele alınır.

Başka bir deyişle, WSGI temelde python uygulamaları (Flask, Django, vb.) İle web sunucuları (UWSGI, Gunicorn, vb.) Arasındaki bir sözleşmedir. Bunun yararı, web sunucularını çok az çabayla değiştirebilmenizdir, çünkü bunların PEP-333'te belirtildiği gibi aslında hedeflerden biri olan WSGI spesifikasyonuna uyduklarını bilirsiniz .

Sadece birkaç isim - Python şu anda böyle Zope, Kişot, Webware, SkunkWeb, PSO ve Twisted Web gibi web uygulama çerçevelerinin, çeşitli sahiptir 1 . Bu çok çeşitli seçenekler yeni Python kullanıcıları için bir sorun olabilir, çünkü genel olarak konuşursak, web çerçevesi seçimleri, kullanılabilir web sunucuları seçimlerini sınırlayacaktır ve bunun tersi de geçerlidir.


20

Geleneksel bir web sunucusu Python uygulamalarını anlamaz veya çalıştırmanın herhangi bir yolu yoktur. WSGI sunucusunun devreye girmesinin nedeni budur. Öte yandan Nginx, istekleri işlemek ve Python WSGI sunucuları için yanıtları geri vermek için ters proxy'yi destekler.

Bu bağlantı size yardımcı olabilir: https://www.fullstackpython.com/wsgi-servers.html


4
Burada üç şey var: nginx, uwsgi ve flask. WSGI spesifikasyonu bağlamında hepsi birbirine nasıl uyuyor? Nginx sunucu mu ve uwsgi uygulama mı yoksa uwsgi sunucu mu ve flask uygulama mı?
d512

uWSGI sunucudur ve flask uygulamasıdır.
Rafiqul Hasan

Pekala, sakıncası yoksa, kendi soruma verdiğim yanıta bak ve ne düşündüğünü gör
d512

4
Bir web sunucusu Python uygulamalarını neden anlamıyor? PHP'yi anlayabilir, neden Python veya diğer diller olmasın?
jdogg

0

Basit bir ifadeyle, Nginx web sunucusu ile bir CGI veya PHP uygulaması çalıştırdığınız yerde bir benzetme düşünün. Bu dosyaları çalıştırmak için php-fpm gibi ilgili işleyicileri kullanacaksınız, çünkü web sunucusu kendi doğal biçiminde bu formatları oluşturmuyor.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.