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.
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
WebSocketDisconnectpå en ryddig måte. - Bygde en tilkoblingsbehandler som kan kringkaste til mange klienter.
- Lærte å skalere med Redis pub/sub og sikre tilkoblinger.
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
- Repetisjon av Async/Await i Python
- FastAPI og asynkrone operasjoner
- Utføring av bakgrunnsoppgaver
- WebSockets for sanntidskommunikasjon