Richten Sie mit Socket einen Internet-Server in Python ein

Als Ergänzung zum Netzwerkclient-Lernprogramm zeigt dieses Lernprogramm, wie ein einfacher Webserver in implementiert wird Python. Dies ist allerdings kein Ersatz für Apache oder Zope. Es gibt auch robustere Möglichkeiten, Webdienste in Python mithilfe von Modulen wie BaseHTTPServer zu implementieren. Dieser Server verwendet ausschließlich das Socket-Modul.

Sie werden sich daran erinnern, dass das Socket-Modul das Rückgrat der meisten Python-Webdienstmodule ist. Wie beim einfachen Netzwerkclient werden beim Erstellen eines Servers die Grundlagen von Webdiensten in Python transparent dargestellt. BaseHTTPServer selbst importiert das Socket-Modul, um einen Server zu beeinflussen.

Zur Überprüfung: Alle Netzwerktransaktionen finden zwischen Clients und Servern statt. In den meisten Protokollen fragen die Clients nach einer bestimmten Adresse und empfangen Daten.

Innerhalb jeder Adresse kann eine Vielzahl von Servern ausgeführt werden. Das Limit liegt in der Hardware. Bei ausreichender Hardware (RAM, Prozessorgeschwindigkeit usw.) kann derselbe Computer als Webserver, FTP-Server und

instagram viewer
Mail-Server (Pop, SMTP, IMAP oder alle oben genannten) alle gleichzeitig. Jeder Dienst ist einem Port zugeordnet. Der Port ist an einen Socket gebunden. Der Server überwacht den zugehörigen Port und gibt Informationen aus, wenn an diesem Port Anforderungen eingehen.

Um eine Netzwerkverbindung zu beeinflussen, müssen Sie den Host, den Port und die an diesem Port zulässigen Aktionen kennen. Die meisten Webserver laufen auf Port 80. Um Konflikte mit einem installierten Apache-Server zu vermeiden, wird unser Webserver jedoch auf Port 8080 ausgeführt. Um Konflikte mit anderen Diensten zu vermeiden, sollten Sie die HTTP-Dienste am Port 80 oder 8080 belassen. Dies sind die beiden häufigsten. Wenn diese verwendet werden, müssen Sie natürlich einen offenen Port finden und Benutzer auf die Änderung aufmerksam machen.

Wie beim Netzwerkclient sollten Sie beachten, dass diese Adressen die gemeinsamen Portnummern für die verschiedenen Dienste sind. Solange der Client den richtigen Dienst am richtigen Port an der richtigen Adresse anfordert, wird die Kommunikation fortgesetzt. Google Der E-Mail-Dienst wurde beispielsweise anfangs nicht auf den allgemeinen Portnummern ausgeführt. Da sie jedoch wissen, wie sie auf ihre Konten zugreifen können, können Benutzer ihre E-Mails weiterhin abrufen.

Im Gegensatz zum Netzwerkclient sind alle Variablen auf dem Server fest verdrahtet. Für jeden Dienst, von dem erwartet wird, dass er ständig ausgeführt wird, sollten die Variablen seiner internen Logik nicht in der Befehlszeile festgelegt werden. Die einzige Variation wäre, wenn Sie aus irgendeinem Grund möchten, dass der Dienst gelegentlich und auf verschiedenen Portnummern ausgeführt wird. In diesem Fall können Sie jedoch weiterhin die Systemzeit überwachen und die Bindungen entsprechend ändern.

Wie bereits erwähnt, muss der Server den Host kennen, dem er zugeordnet werden soll, und den Port, an dem er abhören soll. Für unsere Zwecke wird der Service für jeden Hostnamen überhaupt gelten.

Der Port wird, wie bereits erwähnt, 8080 sein. Beachten Sie also, dass Sie, wenn Sie diesen Server in Verbindung mit dem Netzwerkclient verwenden, die darin verwendete Portnummer ändern müssen Programm.

Ob Informationen angefordert oder bereitgestellt werden sollen, um auf die zuzugreifen Internetmüssen wir einen Socket erstellen. Die Syntax für diesen Aufruf lautet wie folgt:

Die ersten beiden sind offensichtlich Internetprotokolle. Auf alles, was über das Internet geht, kann in diesen Familien zugegriffen werden. Viele Netzwerke laufen immer noch nicht unter IPv6. Sofern Sie nichts anderes wissen, ist es am sichersten, standardmäßig IPv4 zu verwenden und AF_INET zu verwenden.

Die bei weitem häufigsten Typen sind SOCK_STEAM und SOCK_DGRAM, da sie auf den beiden Protokollen der IP-Suite (TCP und UDP) funktionieren. Die letzten drei sind viel seltener und werden daher möglicherweise nicht immer unterstützt.

Nach dem Erstellen des Sockets müssen wir die Socket-Optionen festlegen. Für jedes Socket-Objekt können Sie die Socket-Optionen mithilfe der Methode setsockopt () festlegen. Die Syntax lautet wie folgt:

Wenn wir der Person, die den Server anruft, Feedback geben möchten, können wir jetzt einen Druckbefehl eingeben, um zu bestätigen, dass der Server betriebsbereit ist.

Nachdem wir den Server eingerichtet haben, müssen wir jetzt sagen Python Was tun, wenn eine Anfrage an den angegebenen Port gestellt wird? Dazu referenzieren wir die Anfrage nach ihrem Wert und verwenden sie als Argument einer persistenten while-Schleife.

Wenn eine Anfrage gestellt wird, sollte der Server die Anfrage annehmen und ein Dateiobjekt erstellen, um mit ihr zu interagieren.

In diesem Fall verwendet der Server denselben Port zum Lesen und Schreiben. Daher erhält die Makefile-Methode das Argument 'rw'. Die Nulllänge der Puffergröße lässt einfach den Teil der Datei dynamisch bestimmen.

Sofern wir keinen Single-Action-Server erstellen möchten, besteht der nächste Schritt darin, Eingaben aus dem Dateiobjekt zu lesen. Wenn wir das tun, sollten wir darauf achten, diese Eingabe von überschüssigem Leerzeichen zu entfernen.

Die Anforderung erfolgt in Form einer Aktion, gefolgt von einer Seite, dem Protokoll und der Version des verwendeten Protokolls. Wenn eine Webseite bereitgestellt werden soll, wird diese Eingabe aufgeteilt, um die angeforderte Seite abzurufen, und diese Seite wird dann in eine Variable gelesen, die dann in das Socket-Dateiobjekt geschrieben wird. Eine Funktion zum Einlesen einer Datei in ein Wörterbuch finden Sie im Blog.

Um dieses Tutorial ein wenig anschaulicher zu machen, was man mit dem Socket-Modul machen kann, werden wir auf diesen Teil des Servers verzichten und stattdessen zeigen, wie man die Darstellung von Daten nuancieren kann. Geben Sie die nächsten Zeilen in das Feld ein Programm.

Wenn man eine Webseite sendet, ist die erste Zeile eine gute Möglichkeit, die Daten in einen Webbrowser einzuführen. Wenn es weggelassen wird, rendern die meisten Webbrowser standardmäßig HTML. Wenn man es jedoch einschließt, muss auf das 'OK' folgen zwei neue Zeilenzeichen. Diese werden verwendet, um die Protokollinformationen vom Seiteninhalt zu unterscheiden.

Die Syntax der ersten Zeile lautet, wie Sie wahrscheinlich vermuten können, Protokoll, Protokollversion, Nachrichtennummer und Status. Wenn Sie jemals eine Webseite besucht haben, die verschoben wurde, haben Sie wahrscheinlich einen 404-Fehler erhalten. Die 200-Nachricht hier ist einfach die positive Nachricht.

Der Rest der Ausgabe ist einfach eine Webseite, die über mehrere Zeilen verteilt ist. Sie werden feststellen, dass der Server so programmiert werden kann, dass Benutzerdaten in der Ausgabe verwendet werden. Die letzte Zeile gibt die Webanforderung wieder, wie sie vom Server empfangen wurde.

Schließlich müssen wir beim Schließen der Anforderung das Dateiobjekt und den Server-Socket schließen.

Speichern Sie nun dieses Programm unter einem erkennbaren Namen. Wenn Sie nach dem Aufruf mit 'python program_name.py' eine Nachricht programmiert haben, um zu bestätigen, dass der Dienst ausgeführt wird, sollte dies auf dem Bildschirm gedruckt werden. Das Terminal scheint dann anzuhalten. Alles ist so wie es sein sollte. Öffnen Sie Ihren Webbrowser und gehen Sie zu localhost: 8080. Sie sollten dann die Ausgabe der von uns angegebenen Schreibbefehle sehen. Bitte beachten Sie, dass ich aus Platzgründen keine Fehlerbehandlung in diesem Programm implementiert habe. Jedes Programm, das in die Wildnis entlassen wird, sollte es jedoch tun.