0%

Hoofdstuk 12

Waar je hierna heen gaat

Waar je hierna heen gaat

Deze les kijkt terug en helpt je kiezen waar je hierna heen gaat.

Dit kun je nu. Je hebt de acceptwaarde van een berekend en een upgrade beantwoord of geweigerd. Je hebt met de hand gecodeerd, gedecodeerd en gemaskeerd, en een verbinding gesloten met een code en een reden. Je hebt de bibliotheek websockets gekoppeld aan die code. Je hebt een scorebord gebouwd met snapshots bij binnenkomst, versies, outboxen met één plek, en een token dat vóór 101 wordt gecontroleerd. Je hebt de server begrensd, een client geschreven met eerlijke exitcodes, en beide offline getest. En je hebt één handler herschreven als .

Wat de site bewees, en wat niet

Elke controle die je hebt gehaald, draaide tegen stand-ins in het geheugen, of las de bestanden die je schreef: gescripte verbindingen, versies met elk één fout voor je tests, en een coroutine waar met de hand doorheen werd gestapt. De runs via pl_ws.py en de optionele run op je eigen computer waren er om naar te kijken; geen enkel cijfer hing ervan af.

Sommige dingen heeft deze cursus bewust nooit aangeraakt. Geen enkele les bereikte het openbare internet, en geen browser maakte verbinding met een server die jij schreef. Er stond nooit een wss://-endpoint met een , en nooit een proxy, voor je code.

Kies één route

Hieronder staan zes optionele routes. Kies er één. Geen ervan wordt beoordeeld. Twee routes noemen een Python Land-cursus waar je nu aan kunt beginnen: Async Python heeft alleen Python in Practice nodig, en Web Security with Python heeft with Python nodig.

Async Python

  • Doel: async-programma’s schrijven: , , blokkerende aanroepen, async-tests.

  • Eerste stap: begin aan Async Python, dat verdergaat waar hoofdstuk 11 stopte.

  • Klaar als: je drie kijkers en een scorebijhouder als tasks binnen één asyncio.run kunt draaien, en ze allemaal netjes kunt stoppen.

WebSocket-endpoints in FastAPI

  • Doel: het scorebord vanuit een framework serveren.

  • Eerste stap: installeer op je eigen computer met zijn testclient, bijvoorbeeld fastapi[standard] (TestClient heeft httpx nodig, en gewone fastapi brengt dat niet mee), en begin bij het endpoint /watch uit hoofdstuk 11.

  • Klaar als: je endpoint /watch de snapshot bij binnenkomst stuurt, daarna een nieuwere snapshot nadat er een score is binnengekomen, en dan sluit met 1000, en een test binnen het proces alle drie ontvangt.

Om die app op een echte te serveren, installeer je naast uvicorn een -bibliotheek zoals websockets; zonder zo’n bibliotheek kan uvicorn geen WebSockets serveren.

Productie

  • Doel: zien wat er tussen een WebSocket-server en het internet staat.

  • Eerste stap: lees hoe een reverse proxy zoals nginx of Caddy WebSocket-verbindingen doorgeeft aan de applicatie erachter.

  • Klaar als: je kunt tekenen waar ophoudt vóór een wss://-service, en kunt uitleggen waarom een proxy die de headers Upgrade en Connection weglaat de handshake breekt, en waarom zijn idle-time-out keepalive belangrijk maakt.

Message brokers

  • Doel: broadcasten naar kijkers die verbonden zijn met meer dan één serverproces.

  • Eerste stap: start op je eigen computer twee kopieën van je server uit hoofdstuk 10 op verschillende poorten, kijk naar elk ervan, en scoor op één.

  • Klaar als: je kunt uitleggen waarom broadcast alleen de kijkers in zijn eigen proces bereikt, en wat een broker ertussen toevoegt.

Browserclients

  • Doel: de scores op een webpagina zetten.

  • Eerste stap: geef op je eigen computer origins=["http://localhost:8000"] mee aan serve(...) in de open_server van je hoofdstuk 10, zoals hoofdstuk 9, les 4 liet zien. Sla het browserfragment uit hoofdstuk 9 op in een pagina, serveer die met python -m http.server 8000, en open hem op http://localhost:8000. Een pagina die vanuit een bestand is geopend, stuurt Origin: null, en dat kan geen allowlist noemen.

  • Klaar als: een pagina het scorebord toont en bij elke score bijwerkt.

Webbeveiliging

  • Doel: leren wat een server die browsers bereiken moet verdedigen, verder dan de controles uit hoofdstuk 9.

  • Eerste stap: begin aan Web Security with Python. Hoofdstuk 8 daarvan legt uit, cross-site verzoeken, en dezelfde Origin-controle die je gebruikte om de handshake te bewaken.

  • Klaar als: je kunt uitleggen wat een pagina op een andere site de browser van een bezoeker naar je scorebordserver kan laten sturen, en welke van je controles dat weigert.

Toets jezelf

Probeer deze vragen. Er is niets in te leveren.

  • Welke beëindigt een afgelopen quiz, en welke stuurt een server als hij afsluit?

  • Waarom wordt het token gecontroleerd vóór 101, en niet in de handler?

  • Waarom bevat een outbox één snapshot in plaats van een queue ervan?

  • Waarom mag een coroutine nooit time.sleep aanroepen?

De gewoontes om te houden

Drie gewoontes gaan mee. Begrens elk wachten, want de andere kant antwoordt misschien nooit. Schrijf het contract op vóór de code, want een client en een server die het oneens zijn, kunnen niet allebei gelijk hebben. En test zonder netwerk, via een naad die jij beheerst, zodat een falende test naar je code wijst, niet naar het netwerk.