0%

Kapitel 1

Wenn der Server Neuigkeiten hat

Willkommen im Kurs

Hallo, ich bin Erik. Ich schreibe und pflege diesen Kurs, zusammen mit dem Rest von Python Land.

In with Python hat immer der Client zuerst gefragt, und dein Server hat nur geantwortet. Das passt zu einer Leseliste, aber nicht zu einer Anzeigetafel, bei der die Neuigkeiten auf dem Server entstehen und jeder Zuschauer sie sofort haben will. Dieser Kurs baut die Verbindung, über die ein Server zuerst sprechen darf: einen . Du betreibst beide Enden selbst, in einem einzigen Programm, weil nichts außerhalb dieser Website deinen Code erreichen kann.

Was du baust

Der Kurs folgt einem Projekt: einer Anzeigetafel für einen Quizabend. Mehrere Zuschauer sehen jede Änderung des Punktestands, sobald sie passiert, und ein Punktezähler, der ein geheimes Token besitzt, ist der Einzige, der einen Punktestand ändern darf. Jede Nachricht ist ein kleines Stück mit einem type, und die Nachrichten des Servers tragen zusätzlich eine version.

Der Kurs besteht aus zwei Hälften.

KapitelWas du baust
1warum es WebSockets gibt: was Polling kostet und was zwei Notlösungen verbessern
2 bis 5den , die , die jede Nachricht tragen, und einen Echo-Dienst, von Hand geschrieben und nur mit der Standardbibliothek
6 bis 10die Anzeigetafel mit der Bibliothek websockets: viele Zuschauer, langsame und verlorene Verbindungen, eine Token-Prüfung und schließlich ein getesteter Server und Client
11ein Vorgeschmack auf async: derselbe Handler, gelesen und mit async def neu geschrieben
12wie es weitergeht

Der Code, den du in den Kapiteln 2 bis 5 schreibst, ist ein Lern-Codec: Er zeigt dir jedes Byte, damit du weißt, was eine Bibliothek für dich erledigt, und er soll keine Bibliothek ersetzen. Ab Kapitel 6 verwendest du stattdessen das Paket websockets. Es ist in deiner Sandbox bereits installiert.

Wo dein Code läuft

Kein Browser und keine öffentliche Adresse wird sich je mit dem Code verbinden, den du auf dieser Website schreibst. Deine Sandbox hat keinen Weg ins öffentliche Internet, und nichts von außerhalb kann hineingelangen, also nimmt keine Lektion in diesem Kurs Kontakt mit einer echten Website auf.

Jeder Live-Lauf findet stattdessen an einem Ort statt: in einem einzigen Python-Programm, auf der 127.0.0.1. Dieses Programm startet den Server und seine Clients, lässt sie miteinander reden und hält nach einer festgelegten Anzahl von Nachrichten oder nach einer Frist absichtlich an. Echte Projekte testen WebSocket-Code genauso, weil ein Test, der einen zweiten Rechner oder einen Browser braucht, langsam und anfällig ist. Wenn eine Lektion deine Arbeit prüft, gibt sie deinen Stellvertreter für Verbindungen und öffnet nie eine echte.

Dieses Kapitel öffnet überhaupt keine Verbindung; jede Zahl darin stammt aus einer kleinen Simulation, die du in deinem Browser ausführen kannst.

Wo nehmen die WebSocket-Server, die du in diesem Kurs schreibst, Verbindungen an?

Was du mitbringst

Du brauchst HTTP with Python und damit auch Networks with Python. Die Lektionen erwarten, dass du:

  • eine HTTP-Anfrage und eine HTTP-Antwort als Bytes schreiben und einen Kopf mit split zerlegen kannst;

  • von einem in einen Empfangspuffer lesen kannst, mit read_exact für eine bekannte Anzahl von Bytes und mit read_head für alles bis zur Leerzeile;

  • ganze Zahlen mit struct in packen und entpacken kannst;

  • einen Server auf 127.0.0.1 betreiben kannst, der absichtlich anhält, mit einem Thread pro Verbindung;

  • Socket-Code testen kannst, indem du deinen Funktionen statt eines Netzwerks einen Fake-Socket übergibst;

  • base64 und hashlib verwenden kannst, wie du es für Basic-Authentifizierung und getan hast.

Python Fundamentals II wird empfohlen, ist aber keine Voraussetzung. Einige mitgelieferte Dateien enthalten class-Zeilen und Zeilen, die mit @ beginnen; die Lektionen erklären, wie du sie liest, und keine Übung verlangt, dass du so etwas selbst schreibst.

Lerne Monty kennen

Monty ist der Lernbegleiter von Python Land und steht dir neben jeder Lektion zur Verfügung. Bitte um eine weitere Erklärung, um einen Hinweis, der dir nicht die Lösung verrät, oder um Hilfe beim Lesen einer Fehlermeldung.

Wenn du angemeldet bist, enthält dein kostenloses Konto 5 Monty-Hilfen pro Tag, gemeinsam für alle Kurse. Eine gute erste Frage an dieser Stelle:

Erinnere mich in ein paar Sätzen daran, was read_head in HTTP with Python getan hat und warum es die Bytes nach der Leerzeile behalten hat.

Kapitel 2 stützt sich auf diese Funktion.

Mit Guided erhältst du bis zu 50 Monty-Hilfen pro Tag. Fragen, Hinweise, Fehlererklärungen, zusätzliche Übungen und Code-Feedback teilen sich dasselbe Tageslimit. Der Zähler zeigt, wie viel noch übrig ist und wann das Limit erneuert wird. Jede Lektion und jeder normale erneute Übungsversuch bleibt kostenlos.

Die nächste Lektion probiert den naheliegendsten Weg aus, eine Anzeigetafel nur mit Anfragen und Antworten aktuell zu halten, und misst, was er kostet.