Düz İngilizce'de WSGI ve CGI nedir?


Yanıtlar:


60

WSGI, Python yorumlayıcısını web sunucusu başlangıcında, web sunucusu işleminin bir parçası olarak (gömülü mod) veya ayrı bir işlem (arka plan programı modu) olarak çalıştırır ve betiği içine yükler. Her istek, çağrılan kodda belirli bir işlevle sonuçlanır ve istek ortamı işleve bağımsız değişkenler olarak iletilir.

CGI, betiği her istek için ayrı bir işlem olarak çalıştırır ve onunla "iletişim kurmak" için ortam değişkenlerini, stdin ve stdout'u kullanır.


15
WSGI! = Mod_wsgi. Diliniz, WSGI'nin bir uygulaması olan mod_wsgi'yi kastetmenizi önerir. WSGI'nin kendisi yalnızca bir spesifikasyondur ve CGI'nın üstünde dahil olmak üzere birçok farklı şekilde uygulanabilir.
Graham Dumpleton

@Graham: Bu modlarda WSGI uygulamalarının çalıştırılmasını destekleyen başka bir WSGI kapsayıcısı olmadığını mı söylüyorsunuz?
Ignacio Vazquez-Abrams

3
Teknik olarak biri, en azından süreçlerin nasıl başladığı veya gömülü bir sistemde kodun nasıl etkinleştirildiği kadar, yalnızca bu ikisinden daha ince varyasyonların olduğu söylenebilir. Yani, sadece bu iki kategoriye göre genelleme yaparken dikkatli olunmalıdır. Büyük bir seviyede sahip olduğunuzu söyleyebilirsiniz, ancak derinlemesine derinlemesine incelemek istiyorsanız, bundan biraz daha fazlası vardır.
Graham Dumpleton

1
@GrahamDumpleton, meraktan dolayı, WSGI'nin CGI üzerine nasıl uygulanabileceğini açıklar mısınız?
Yoland

2
WSGI spesifikasyonunu okuyun. Örnek bir CGI / WSGI köprüsünü gösterir. python.org/dev/peps/pep-3333/#the-server-gateway-side Daha sağlam bir uygulama için bkz. github.com/GrahamDumpleton/cgi2wsgi Ciddi olmakla birlikte, genel olarak CGI'dan kaçınmak isteyebilirsiniz.
Graham Dumpleton

256

Tamamen geriye dönük bir bakış açısından, Blankman, işte Web Hizmetleri Ağ Geçidi Arayüzü için "Giriş Sayfam":

BİRİNCİ BÖLÜM: WEB SUNUCULARI

Web sunucuları yanıtlar sunar. Oturuyorlar, sabırla bekliyorlar ve sonra hiçbir uyarıda bulunmadan aniden:

  • bir istemci işlemi bir istek gönderir. İstemci süreci bir web sunucusu, bot, mobil uygulama vb. Olabilir. Bu sadece "müşteri" dir
  • web sunucusu bu isteği alır
  • kasıtlı olarak mırıldanma çeşitli şeyler olur (aşağıya bakın)
  • Web sunucusu istemciye bir şey gönderir
  • web sunucusu tekrar oturur

Web sunucuları (en azından daha iyileri) bu konuda çok ÇOK iyidir. Talebe bağlı olarak işlemlerin ölçeğini artırıyor ve küçültüyorlar, en gevşek müşterilerle gerçekten kirli ağlar üzerinden güvenilir bir şekilde görüşmeler yapıyorlar ve bu konuda asla endişelenmemize gerek yok. Sadece hizmet etmeye devam ediyorlar.

Demek istediğim şu: web sunucuları tam da bu: sunucular. İçerik hakkında hiçbir şey bilmiyorlar, kullanıcılar hakkında hiçbir şey bilmiyorlar, aslında nasıl çok bekleyip güvenilir bir şekilde cevap vereceklerinden başka bir şey bilmiyorlar.

Web sunucusu seçiminiz, yazılımınızı değil, teslimat tercihinizi yansıtmalıdır. Web sunucunuz hizmetten sorumlu olmalıdır, işleme veya mantıksal şeylerden değil.

İKİNCİ BÖLÜM: (PYTHON) YAZILIMI

Yazılım ortalıkta oturmuyor. Yazılım yalnızca yürütme sırasında mevcuttur. Yazılım, ortamındaki beklenmedik değişiklikler söz konusu olduğunda (dosyalar beklediği yerde değil, parametreler yeniden adlandırılıyor vb.) Çok fazla uyumlu değildir. Optimizasyon, tasarımınızın ana ilkesi olmalıdır (elbette), yazılımın kendisi optimizasyon yapmaz. Geliştiriciler optimize eder. Yazılım yürütülür. Yazılım, yukarıdaki 'kasıtlı mırıltı' bölümündeki her şeyi yapar. Herhangi bir şey olabilir.

Yazılım seçiminiz veya tasarımınız, web sunucusu seçiminizi değil, uygulamanızı, işlev seçiminizi yansıtmalıdır.

Bu, dilleri web sunucularına "derlemenin" geleneksel yönteminin acı verici hale geldiği yerdir. Uygulamanıza fiziksel sunucu ortamıyla başa çıkmak için veya en azından, web sunucuları arasında tekdüzelik yanılsaması vermek için çalışma zamanında dahil edilecek uygun bir 'sarmalayıcı' kitaplığı seçmeye zorlanmak için uygulamanıza kod koyarsınız.

Öyleyse WSGI NEDİR?

Peki sonunda WSGI nedir? WSGI, iki yarıya bölünmüş bir kurallar dizisidir . Entegrasyonu memnuniyetle karşılayan herhangi bir ortama entegre edilebilecek şekilde yazılırlar.

Web sunucusu tarafı için yazılan ilk kısım, "Tamam, bir WSGI uygulamasıyla uğraşmak istiyorsanız, yazılım yüklendiğinde şu şekilde düşünecektir. İşte uygulamaya sunmanız gereken şeyler ve burada her uygulamanın sahip olmasını bekleyebileceğiniz arayüzdür (düzen). Üstelik, herhangi bir şey ters giderse, işte uygulama nasıl düşünecek ve nasıl davranmasını bekleyebileceğiniz. "

Python uygulama yazılımı için yazılan ikinci kısımda "Tamam, bir WSGI sunucusuyla uğraşmak istiyorsanız, sunucu sizinle iletişime geçtiğinde şu şekilde düşünecektir. Sunucuya sağlamanız gereken şeyler şunlardır ve işte her sunucunun sahip olmasını bekleyebileceğiniz arayüz (düzen). Üstelik, bir şey ters giderse, işte nasıl davranmanız ve sunucuya söylemeniz gerekenler. "

İşte karşınızda - sunucular sunucular olacak ve yazılımlar yazılım olacak ve işte birinin diğerinin özelliklerini göz önünde bulundurmasına gerek kalmadan mükemmel bir şekilde anlaşabilmelerinin bir yolu. Bu WSGI.

diğer yandan mod_wsgi, Apache'nin WSGI uyumlu yazılımla konuşmasına izin veren bir eklentidir, diğer bir deyişle mod_wsgi, yukarıdaki kural kitabının birinci bölümündeki kuralların Apache'de bir uygulamasıdır .

CGI gelince .... başka birine sorun :-)


21
Bu cevabın "başkasına sor" ile bitmesine izin vermektense, birinin bu cevabı aynı şekilde CGI içerecek şekilde değiştirmesini isterdim.
Bruno Bronosky

1
'sunucular sunucu ve yazılım yazılım olacak' - 'sunucular Mars'tan ve yazılım Venüs'ten' :)
Rahul

22

Bu alandaki tüm terimler konusunda net değilseniz ve bununla yüzleşelim, kafa karıştırıcı bir kısaltma yüklü olanıdır, ayrıca CGI ile FastCGI ile WSGI'yi tartışan resmi bir python HOWTO biçiminde iyi bir arka plan okuyucusu vardır. üzerinde. Keşke önce okusaydım.


21

Hem CGI hem de WSGI, programların web isteklerini işlemek için kullanabileceği standart arayüzleri tanımlar. CGI arabirimi, WSGI'den daha düşük bir seviyededir ve sunucunun HTTP isteğinden gelen verileri içeren ortam değişkenlerini ayarlamasını içerir, program çıplak bir HTTP sunucusu yanıtı gibi biçimlendirilmiş bir şey döndürür.

Öte yandan WSGI, programcıların sunucudan bağımsız ve diğer WSGI uygulamalarına (ara katman yazılımı) sarılabilen uygulamalar yazmasına olanak tanıyan Python'a özgü, biraz daha üst düzey bir arabirimdir.

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.