0%

Hoofdstuk 1

Als de server nieuws heeft

Welkom bij de cursus

Hoi, ik ben Erik. Ik schrijf en onderhoud deze cursus, net als de rest van Python Land.

In with Python vroeg een client altijd eerst, en gaf je server alleen antwoord. Dat past bij een leeslijst, niet bij een scorebord, waar het nieuws op de server gebeurt en elke kijker het meteen wil hebben. Deze cursus bouwt de verbinding waarmee een server als eerste kan spreken: een . Je draait beide kanten ervan zelf, binnen één programma, omdat niets buiten deze site je code kan bereiken.

Wat je gaat bouwen

De cursus volgt één project: een scorebord voor een quizavond. Meerdere kijkers zien elke scorewijziging zodra die gebeurt, en één scorebijhouder, die een geheim token heeft, is de enige die een score mag veranderen. Elk bericht is een klein stukje met een type, en de berichten van de server hebben ook een version.

De cursus bestaat uit twee helften.

HoofdstukkenWat je bouwt
1waarom WebSockets bestaan: wat polling kost, en wat twee omwegen oplossen
2 tot en met 5de , de die elk bericht dragen, en een echoservice, met de hand geschreven met alleen de standaardbibliotheek
6 tot en met 10het scorebord op de bibliotheek websockets: veel kijkers, trage en verloren verbindingen, een tokencontrole, en daarna een geteste server en client
11een voorproefje van async: dezelfde handler gelezen en herschreven met async def
12hoe je verder kunt

De code die je in hoofdstuk 2 tot en met 5 schrijft, is een codec om van te leren: hij laat je elke byte zien, zodat je weet wat een bibliotheek voor je doet, en hij is niet bedoeld om er een te vervangen. Vanaf hoofdstuk 6 gebruik je in plaats daarvan het pakket websockets. Het is al geïnstalleerd in je sandbox.

Waar je code draait

Geen browser en geen openbaar adres zal ooit verbinding maken met de code die je op deze site schrijft. Je sandbox heeft geen route naar het openbare internet, en niets daarbuiten kan erin, dus geen enkele les in deze cursus neemt contact op met een echte website.

Elke live run gebeurt in plaats daarvan op één plek: binnen één Python-programma, op het 127.0.0.1. Dat programma start de server en zijn clients, laat ze praten, en stopt met opzet na een vast aantal berichten of na een deadline. Echte projecten testen WebSocket-code op dezelfde manier, omdat een test die een tweede machine of een browser nodig heeft traag en kwetsbaar is. Als een les je werk controleert, geeft ze je stand-ins voor verbindingen en opent ze nooit een live verbinding.

Dit hoofdstuk opent helemaal geen verbinding; elk getal erin komt uit een kleine simulatie die je in je browser kunt draaien.

Waar accepteren de WebSocket-servers die je in deze cursus schrijft verbindingen?

Wat je meebrengt

Je hebt HTTP with Python nodig en, via die cursus, Networks with Python. De lessen verwachten dat je:

  • een HTTP-verzoek en -antwoord als bytes kunt schrijven, en een kop kunt parsen met split;

  • van een kunt lezen in een ontvangstbuffer, met read_exact voor een bekend aantal bytes en read_head voor alles tot aan de lege regel;

  • gehele getallen kunt inpakken en uitpakken met struct in ;

  • een server op 127.0.0.1 kunt draaien die met opzet stopt, met een thread per verbinding;

  • socketcode kunt testen door je functies een fake socket te geven in plaats van een netwerk;

  • base64 en hashlib kunt gebruiken, zoals je deed voor Basic-authenticatie en .

Python Fundamentals II wordt aangeraden, maar is niet verplicht. Sommige meegeleverde bestanden bevatten class-regels en regels die met @ beginnen; de lessen leggen uit hoe je ze leest, en geen enkele oefening vraagt je om een van de twee te schrijven.

Maak kennis met Monty

Monty is de leergids van Python Land en staat naast elke les. Vraag om een tweede uitleg, een hint die het antwoord niet weggeeft, of hulp bij het lezen van een foutmelding.

Als je bent ingelogd, krijg je met een gratis account 5 keer Monty-hulp per dag, gedeeld over alle cursussen. Een goede eerste vraag hier:

Leg me in een paar zinnen nog eens uit wat read_head deed in HTTP with Python en waarom het de bytes na de lege regel bewaarde.

Hoofdstuk 2 leunt op die functie.

Met Guided krijg je tot 50 keer Monty-hulp per dag. Vragen, hints, foutuitleg, extra oefeningen en codefeedback delen dezelfde dagelijkse limiet. De teller laat zien hoeveel hulp je nog hebt en wanneer de limiet wordt vernieuwd. Elke les en gewone herkansing van een oefening blijft gratis.

De volgende les probeert de meest voor de hand liggende manier om een scorebord bij te houden met niets anders dan verzoeken en antwoorden, en meet wat dat kost.