Da un punto totalmente step-back di vista, Blankman, qui è il mio "Intro pagina" per Web Services Gateway Interface:
PARTE PRIMA: SERVER WEB
server Web servono risposte. Si siedono intorno, aspettando pazientemente, e poi senza alcun preavviso, improvvisamente:
- un processo client invia una richiesta. Il processo client potrebbe essere un server web, un bot, un'app mobile, qualunque cosa. E 'semplicemente "il cliente"
- il web server riceve la richiesta accadono
- deliberate mumble varie cose (vedi sotto)
- Il server web restituisce qualcosa al cliente
- web server si trova in giro di nuovo
I server Web (almeno quelli migliori) sono MOLTO bravi in questo. Esse aumentano e diminuiscono l'elaborazione a seconda della domanda, gestiscono in modo affidabile le conversazioni con i clienti più raffinati su reti davvero crude e non ci dobbiamo mai preoccupare. Continuano a servire.
Questo è il mio punto: i server Web sono proprio questo: i server. Non sanno nulla del contenuto, nulla degli utenti, niente di fatto tranne il modo di aspettare molto e rispondere in modo affidabile.
La scelta del server Web deve riflettere le preferenze di consegna, non il software. Il tuo server web dovrebbe essere responsabile del servizio, non dell'elaborazione o delle cose logiche.
PARTE SECONDA: (Python) SOFTWARE
Software non si siede intorno. Il software esiste solo al momento dell'esecuzione. Il software non è molto accomodante quando si tratta di cambiamenti imprevisti nel suo ambiente (i file non sono quelli in cui si aspetta, i parametri vengono rinominati, ecc.). Sebbene l'ottimizzazione dovrebbe essere un principio centrale del tuo design (ovviamente), il software stesso non si ottimizza. Gli sviluppatori ottimizzano. Il software viene eseguito. Il software fa tutto nella sezione "mormora intenzionalmente" sopra. Potrebbe essere qualsiasi cosa
La scelta o la struttura del software dovrebbero riflettere la vostra applicazione, la vostra scelta di funzionalità e non la vostra scelta di server web.
Qui è dove il metodo tradizionale di "compilazione in" lingue per server Web diventa doloroso. Si finisce col mettere il codice nella propria applicazione per far fronte all'ambiente del server fisico o, almeno, essere costretti a scegliere una libreria "wrapper" appropriata da includere a runtime, per dare l'illusione di uniformità tra i server web.
COSA SIGNIFICA WSGI?
Quindi, infine, cos'è WSGI? WSGI è un insieme di regole, scritto in due metà. Sono scritti in modo tale da poter essere integrati in qualsiasi ambiente che accolga l'integrazione.
La prima parte, scritta per il lato server Web, dice "OK, se vuoi gestire un'applicazione WSGI, ecco come il software penserà quando verrà caricato. Ecco le cose che devi rendere disponibili al applicazione, ed ecco l'interfaccia (layout) che puoi aspettarti che ogni applicazione abbia. Inoltre, se qualcosa va storto, ecco come l'app penserà e come ti aspetti che si comporti. "
La seconda parte, scritta per il software applicativo Python, dice "OK, se vuoi gestire un server WSGI, ecco come il server penserà quando ti contatterà. Ecco le cose che devi rendere disponibili per il server, e qui c'è l'interfaccia (layout) che puoi aspettarti da ogni server.Inoltre, se qualcosa va storto, ecco come dovresti comportarti ed ecco cosa dovresti dire al server. "
Così ce l'hai - i server saranno server e il software sarà software, ed ecco un modo in cui possono andare avanti semplicemente alla grande senza dover fare sconti per le specifiche dell'altro. Questo è WSGI.
mod_wsgi, d'altra parte, è un plugin per Apache che gli permette di parlare con il software WSGI-compatibile, in altre parole, mod_wsgi è un implementazione - in Apache - delle regole di una parte uno dei libro delle regole di cui sopra .
Per quanto riguarda CGI .... chiedere a qualcun altro :-)
http://stackoverflow.com/questions/219110/how-python-web-frameworks-wsgi-and-cgi-fit-together –