Bootcamp i backendutvikling med FastAPI · leksjon

WebSockets for sanntidskommunikasjon

Bygg sanntidsfunksjoner i FastAPI med WebSockets: godta tilkoblinger, utveksle meldinger, kringkast til mange klienter, og håndter frakoblinger ryddig med asynkrone mønstre.

Leksjon 4 av 413 trinn

WebSockets for sanntidskommunikasjon er en gratis leksjon i Bootcamp i backendutvikling med FastAPI på CoddyKit. Dette er leksjon 4 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Bootcamp i backendutvikling med FastAPI, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Bootcamp i backendutvikling med FastAPI inneholder totalt 4 leksjoner.

Fra forespørsel/svar til sanntid

Vanlig HTTP bruker forespørsel/svar: klienten spør, serveren svarer, og tilkoblingen lukkes. WebSockets holder én tilkobling åpen for full duplekskommunikasjon i sanntid. Perfekt for chat, direkteoppdaterte kontrollpaneler og varsler.

Hvorfor asynkronitet passer for WebSockets

En WebSocket-tilkobling varer lenge og er for det meste inaktiv mens den venter på meldinger. FastAPIs async-modell lar én arbeider håndtere tusenvis av samtidige tilkoblinger uten blokkering.

Et minimalt WebSocket-endepunkt

Deklarer en @app.websocket-rute. Godta tilkoblingen, og kjør deretter en løkke som mottar og sender meldinger.

from fastapi import FastAPI, WebSocket

app = FastAPI()

@app.websocket('/ws')
async def ws(websocket: WebSocket):
    await websocket.accept()
    while True:
        msg = await websocket.receive_text()
        await websocket.send_text(f'echo: {msg}')

Sende JSON

Du kan utveksle strukturerte data med receive_json og send_json i stedet for rå tekst.

data = await websocket.receive_json()
await websocket.send_json({'received': data, 'status': 'ok'})

Håndtere frakoblinger

Klienter kobler fra. Fang opp WebSocketDisconnect for å rydde opp i ressurser i stedet for at behandleren krasjer.

from fastapi import WebSocketDisconnect

try:
    while True:
        await websocket.receive_text()
except WebSocketDisconnect:
    print('client left')

En tilkoblingsbehandler

For å kringkaste meldinger holder du oversikt over aktive tilkoblinger i en behandlerklasse. Legg til ved tilkobling og fjern ved frakobling.

class Manager:
    def __init__(self):
        self.active = []
    async def connect(self, ws):
        await ws.accept()
        self.active.append(ws)
    def disconnect(self, ws):
        self.active.remove(ws)

Kringkaste til alle

Gå gjennom de aktive tilkoblingene og send meldingen til hver av dem. Dette er kjernen i et chatterom.

async def broadcast(self, message):
    for connection in self.active:
        await connection.send_text(message)

Kringkastingslogikk i vanlig Python

Behandleren holder bare oversikt over en liste. Her simuleres tilkoblings-, frakoblings- og kringkastingsflyten synkront.

active = []
def connect(c): active.append(c)
def disconnect(c): active.remove(c)
def broadcast(msg): return [f'{c}<-{msg}' for c in active]
connect('alice'); connect('bob')
print(broadcast('hi'))
disconnect('alice')
print(broadcast('bye'))

Et chatterom-endepunkt

Kombiner delene: koble til, kringkast hver mottatte melding, og koble fra når forbindelsen brytes.

manager = Manager()

@app.websocket('/chat')
async def chat(ws: WebSocket):
    await manager.connect(ws)
    try:
        while True:
            text = await ws.receive_text()
            await manager.broadcast(text)
    except WebSocketDisconnect:
        manager.disconnect(ws)

Skalere utover én prosess

En minnebasert behandler kjenner bare tilkoblingene på sin egen arbeider. For å kringkaste på tvers av flere arbeidere eller servere bruker du en pub/sub-backend, for eksempel Redis, til å distribuere meldinger.

Sikkerhet og begrensninger

Beskytt WebSocket-endepunkter:

  • Autentiser under håndtrykket (for eksempel med et token i spørringen eller toppteksten).
  • Valider innkommende meldinger og begrens størrelsen deres.
  • Bruk heartbeat/ping for å oppdage døde tilkoblinger.

Rask sjekk

Hvorfor klarer ikke en minnebasert tilkoblingsbehandler å kringkaste riktig når du kjører flere Uvicorn-arbeidere?

Oppsummering

Du la til kommunikasjon i sanntid:

  • Godtok WebSocket-tilkoblinger og utvekslet tekst/JSON.
  • Håndterte WebSocketDisconnect på en ryddig måte.
  • Bygde en tilkoblingsbehandler som kan kringkaste til mange klienter.
  • Lærte å skalere med Redis pub/sub og sikre tilkoblinger.
Gratis å komme i gang

Lær deg Bootcamp i backendutvikling med FastAPI med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
21
Leksjoner
84

Ofte stilte spørsmål

Er leksjonen «WebSockets for sanntidskommunikasjon» gratis?

Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Bootcamp i backendutvikling med FastAPI, inkludert «WebSockets for sanntidskommunikasjon», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i Bootcamp i backendutvikling med FastAPI inneholder totalt 4 leksjoner.

Hva lærer jeg i «WebSockets for sanntidskommunikasjon»?

Bygg sanntidsfunksjoner i FastAPI med WebSockets: godta tilkoblinger, utveksle meldinger, kringkast til mange klienter, og håndter frakoblinger ryddig med asynkrone mønstre. Du øver på Bootcamp i backendutvikling med FastAPI med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med Bootcamp i backendutvikling med FastAPI?

Ingen tidligere erfaring er nødvendig. Bootcamp i backendutvikling med FastAPI på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 4 av 4.

Hvor lang tid tar leksjonen «WebSockets for sanntidskommunikasjon»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne Bootcamp i backendutvikling med FastAPI-leksjonen?

Ja. Alle Bootcamp i backendutvikling med FastAPI-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Repetisjon av Async/Await i Python
  2. FastAPI og asynkrone operasjoner
  3. Utføring av bakgrunnsoppgaver
  4. WebSockets for sanntidskommunikasjon
← Tilbake til Bootcamp i backendutvikling med FastAPI