[Systemdesign] Verwenden Sie Python, um zum Spaß einen Webserver zu erstellen (1)

Wenn Sie ein hervorragender Entwickler sein möchten, sollten Sie die interne Struktur der täglich verwendeten Softwaresysteme, einschließlich Programmiersprachen, Datenbanken und Betriebssysteme, Webserver und Webframeworks, genau kennen. Um diese Systeme besser und tiefer zu verstehen, sollten Sie außerdem von vorne beginnen und dieses System Stein für Stein neu erstellen.

In den drei Artikelserien von Ruslan erfahren Sie, wie Sie einen einfachen Webserver von Grund auf neu erstellen, damit jeder den Webserver besser versteht. Dieser Artikel ist hauptsächlich eine Übersetzung der drei Artikel von Ruslan und einige unserer eigenen Erkenntnisse. Ich hoffe, es kann für alle hilfreich sein. Zum besseren Verständnis dieses Artikels können Sie sich auf Mr. Protocol Forest Series beziehen. Möchten Sie bestellen? (HTTP-Protokollübersicht) (bitte stupsen Sie mich an)

Was ist ein Webserver?

Um Ihren eigenen Webserver zu erstellen, müssen Sie zuerst wissen, was ein Webserver ist. Das Folgende ist ein typischer Webserver, von dem ich glaube, dass jeder ihn im Leben benutzt hat:
[Systemdesign] Verwenden Sie Python, um zum Spaß einen Webserver zu erstellen (1)
Kurz gesagt, ein Webserver ist ein laufender Webserver (dh eine Software), der darauf wartet, dass Clients Anforderungen an ihn senden. Wenn die Anforderung empfangen wird, wird eine Antwort generiert und an den Client zurückgesendet. Der Client und der Server kommunizieren über das HTTP-Protokoll miteinander. Der Client kann Ihr Browser oder eine andere Software sein, die das HTTP-Protokoll verwendet. Wenn Sie diesen offiziellen Kontoartikel lesen, verwenden Sie tatsächlich den vom Webserver bereitgestellten Dienst.

Eine einfache Webserver-Implementierung

Kommerzielle Webserver sind sehr komplex. Es ist üblich, Hunderttausende von Codezeilen zu haben, aber es kann auch sehr einfach sein, so einfach wie ein paar Dutzend Codezeilen. Ob Sie es glauben oder nicht, schauen Sie sich Mr. Ruslans erste Version des Webserver-Codes an. Dieses Beispiel ist in Python geschrieben. Auch wenn Sie noch nichts von Python gehört haben (es ist eine supereinfache Sprache, probieren Sie es aus!), Sollten Sie das Konzept anhand des Codes und der Kommentare verstehen können:

import socket
HOST, PORT = '', 8888
listen_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
listen_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
listen_socket.bind((HOST, PORT))
listen_socket.listen(1)
print 'Serving HTTP on port %s ...' % PORT
while True:
    client_connection, client_address = listen_socket.accept()
    request = client_connection.recv(1024)    
    print request

    http_response = """\
HTTP/1.1 200 OK

Hello, World!"""
    client_connection.sendall(http_response)
    client_connection.close()

Speichern Sie den obigen Code als webserver1.py und führen Sie dieses Programm in der Befehlszeile aus. so was:

$ python webserver1.py
Serving HTTP on port 8888 ...

Geben Sie nun die URL: http: // localhost: 8888 / hello in die Adressleiste Ihres Webbrowsers ein , drücken Sie die Eingabetaste und erleben Sie das Wunder. In Ihrem Browser sollte "Hallo Welt!" Angezeigt werden, wie im folgenden Bild dargestellt:
[Systemdesign] Verwenden Sie Python, um zum Spaß einen Webserver zu erstellen (1)

Webserver-Workflow
Lassen Sie uns nun diskutieren, wie es tatsächlich funktioniert. Zuerst beginnen wir mit der soeben eingegebenen Webadresse. Es heißt URL, und dies ist seine Grundstruktur:
[Systemdesign] Verwenden Sie Python, um zum Spaß einen Webserver zu erstellen (1)
URL ist die Adresse eines Webservers. Der Browser verwendet diese Adresse, um den Webserver zu finden, eine Verbindung zum Webserver herzustellen und den oben genannten Inhalt an Sie zurückzugeben. Bevor Ihr Browser HTTP-Anforderungen senden kann, muss er eine TCP-Verbindung zum Webserver herstellen. Anschließend sendet es eine HTTP-Anforderung in der TCP-Verbindung und wartet darauf, dass der Server eine HTTP-Antwort zurückgibt. Wenn Ihr Browser die Antwort erhält, zeigt er seinen Inhalt an. Im obigen Beispiel wird "Hallo Welt!" Angezeigt.

Lassen Sie uns den Prozess des Herstellens einer TCP-Verbindung zwischen dem Client und dem Server weiter untersuchen, bevor Sie die HTTP-Anforderung senden. Um die Verbindung herzustellen, verwenden sie Socket (Socket). Wir verwenden den Browser nicht direkt zum Senden der Anfrage, sondern verwenden Telnet in der Befehlszeile, um diesen Prozess künstlich zu simulieren.

Richten Sie auf Ihrem Computer, auf dem der Webserver ausgeführt wird, eine Telnet-Sitzung in der Befehlszeile ein, geben Sie einen lokalen Domänennamen an, verwenden Sie Port 8888 und drücken Sie die Eingabetaste:

$ telnet localhost 8888
Trying 127.0.0.1 ...
Connected to localhost.

Zu diesem Zeitpunkt haben Sie eine TCP-Verbindung mit dem Server hergestellt, der auf Ihrem lokalen Host ausgeführt wird. In der folgenden Abbildung sehen Sie den grundlegenden Prozess eines Servers von Anfang an, um eine TCP-Verbindung herstellen zu können.
[Systemdesign] Verwenden Sie Python, um zum Spaß einen Webserver zu erstellen (1)
Geben Sie in derselben Telnet-Sitzung GET / hello HTTP / 1.1 ein und geben Sie dann Folgendes ein:

$ telnet localhost 8888
Trying 127.0.0.1 ...Connected to localhost.
GET /hello HTTP/1.1

HTTP/1.1 200 OK
Hello, World!

Sie haben gerade Ihren Browser manuell simuliert (Arbeit)! Sie haben eine HTTP-Anfrage gesendet und eine HTTP-Antwort erhalten. Das Folgende ist die Grundstruktur einer HTTP-Anforderung:
[Systemdesign] Verwenden Sie Python, um zum Spaß einen Webserver zu erstellen (1)
Die erste Zeile der HTTP-Anforderung besteht aus drei Teilen: der HTTP-Methode (GET, da unser Server Inhalte zurückgeben soll) und dem Pfad / Hallo, der die erforderliche Seite angibt, sowie dem Protokoll Ausführung.

Der Einfachheit halber ignoriert der gerade erstellte Webserver den obigen Anforderungsinhalt vollständig. Sie können auch versuchen, nutzlosen Inhalt anstelle von "GET / hello HTTP / 1.1" einzugeben, aber Sie erhalten weiterhin die Antwort "Hello, World!".

Sobald Sie die Anforderungszeile eingeben und die Eingabetaste drücken, sendet der Client die Anforderung an den Server. Der Server liest die Anforderungszeile und gibt die entsprechende HTTP-Antwort zurück.

Der folgende Antwortinhalt wird vom Server an den Client zurückgegeben (Telnet im obigen Beispiel):
[Systemdesign] Verwenden Sie Python, um zum Spaß einen Webserver zu erstellen (1)
Diese Antwort besteht aus drei Teilen: einer Statuszeile HTTP / 1.1 200 OK, gefolgt von einer Leerzeile und dem Antworttext unten.

Die HTTP-Antwortstatuszeile HTTP / 1.1 200 OK enthält die HTTP-Versionsnummer, den HTTP-Statuscode 200 und die HTTP-Statusphrase "OK". Wenn der Browser die Antwort empfängt, wird der Antworttext angezeigt, weshalb im Browser "Hallo Welt!" Angezeigt wird.

Das Obige ist das grundlegende Arbeitsmodell des Webservers. Zusammenfassend: Der Webserver erstellt einen Socket im Empfangsstatus und empfängt neue Verbindungen in einer Schleife. Nachdem der Client eine erfolgreiche TCP-Verbindung hergestellt hat, sendet er eine HTTP-Anforderung an den Server. Anschließend antwortet der Server mit einer HTTP-Antwort und der Client zeigt dem Benutzer den Inhalt der HTTP-Antwort an. Um eine TCP-Verbindung herzustellen, verwenden sowohl der Client als auch der Server Sockets.

Nachdem Sie die grundlegenden Funktionen eines Webservers verstanden haben, können Sie mit einem Browser oder einem anderen HTTP-Client experimentieren. Wenn Sie es versucht und beobachtet haben, sollten Sie in der Lage sein, mithilfe von Telnet manuell HTTP-Anforderungen zu schreiben und ein "humanoider" HTTP-Client zu werden.

Jetzt gibt es eine kleine Frage: "Wie können Sie Django-, Flask- oder Pyramid-Anwendungen auf dem gerade eingerichteten Webserver anpassen, ohne Änderungen am Programm vorzunehmen?" Wird im zweiten Teil dieser Serie erscheinen Erkläre im Detail.

Literatur-Empfehlungen:

Aufwendige | Geschichte Dry Artikel - Verzeichnis
[Wohlfahrt] ihr eigenes Online - Boutique Kurse Video - Sharing sammeln (on)
[Architektur] eine große Website - Architektur Evolution Reise (on)
[Architektur] eine große Website - Architektur Evolution Geschichte (unter)
[C ++ Notes] C ++ Das Speicherlayout des Objektmodells (2)
[C ++ - Hinweise] Das Speicherlayout des C ++ - Objektmodells (1)

Konzentrieren Sie sich auf das Teilen von Wissenszusammenfassungen für Serverhintergrund-Technologie-Stacks

Willkommen, um auf Kommunikation und gemeinsamen Fortschritt zu achten

[Systemdesign] Verwenden Sie Python, um zum Spaß einen Webserver zu erstellen (1)

Codierung

Der Code Farmer hat die richtige Möglichkeit, Ihnen leicht verständliche technische Artikel zur Verfügung zu stellen, um die Technologie zu vereinfachen!

Ich denke du magst

Origin blog.51cto.com/15006953/2552093
Empfohlen
Rangfolge