2009-11-17 5 views

Antwort

67

Korrekt, WSGI ist eine programmatische Python-API-Definition und FASTCGI ist eine sprachunabhängige Socket-Drahtprotokolldefinition. Effektiv sind sie auf verschiedenen Schichten, wobei WSGI eine höhere Schicht ist. Mit anderen Worten, man kann WSGI zusätzlich zu etwas implementieren, das FASTCGI für die Kommunikation mit einem Webserver verwendet, aber nicht umgekehrt.

Im Allgemeinen bedeutet FASTCGI, dass es sich um ein Socket-Wire-Protokoll handelt, dass Sie immer eine Art von Programmierschnittstelle benötigen, um es zu verwenden. Für Python ist eine solche Option WSGI. Da FASTCGI nur ein Mittel zum Zweck ist, kann man seine Leistung in diesem Fall nicht wirklich mit WSGI vergleichen, da WSGI kein vergleichbares Socket-Wire-Protokoll ist, sondern ein Benutzer von FASTCGI selbst.

Man könnte versuchen, die Leistung von verschiedenen Sprachschnittstellen über FASTCGI zu vergleichen, aber im Allgemeinen ist das an sich ziemlich bedeutungslos, da die untere Netzwerkschicht und die Serveranforderungsbehandlung nicht der Flaschenhals sind. Stattdessen wird Ihr Anwendungscode und Ihre Datenbank sein.

+1

Ich denke, es ist sinnvoll zu fragen, was der Zeitunterschied zwischen einer fcgi App, die auf eine Anfrage reagiert, und einer wsgi App, die auf eine Anfrage antwortet. Da es sich bei fcgi und wsgi um zwei verschiedene Möglichkeiten handelt, eine Programmiersprache mit einer Web-Anfrage zu verbinden, machen sie sehr ähnliche Dinge. – Ninjaxor

20

Sie sind zwei verschiedene Dinge. WSGI ist eine Python-spezifische Schnittstelle zum Schreiben von Webanwendungen. Es gibt Wrapper für ungefähr jedes Webserverprotokoll, um die WSGI-Schnittstelle bereitzustellen. FastGCI (FCGI) ist eines dieser Webserver-Protokolle. WSGI ist also eine Abstraktionsschicht, während CGI/FastCGI/mod_python die tatsächlichen Webserver mit der Anwendung kommunizieren. Einige Code müssen die native Schnittstelle zu WSGI übersetzen (es gibt ein CGI-Modul in wsgiref, es gibt flup für FastCGI, etc.). Es gibt auch mod_wsgi für Apache, das die Übersetzung direkt in einem Apache-Modul durchführt, so dass Sie keinen Python-Wrapper benötigen.