FastAPI-backend-kehityksen intensiivikurssi · Oppitunti

WebSockets reaaliaikaiseen viestintään

Rakentakaa FastAPIlla reaaliaikaisia ominaisuuksia WebSocketsien avulla: hyväksykää yhteyksiä, vaihtakaa viestejä, lähettäkää niitä useille clienteille ja käsitelkää yhteyksien katkeamiset siististi async-malleilla.

Oppitunti 4/413 vaihetta

WebSockets reaaliaikaiseen viestintään on ilmainen FastAPI-backend-kehityksen intensiivikurssi-oppitunti CoddyKitissä. Tämä on oppitunti 4/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu FastAPI-backend-kehityksen intensiivikurssi-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. FastAPI-backend-kehityksen intensiivikurssi-kurssilla on yhteensä 4 oppituntia.

Pyynnöstä ja vastauksesta reaaliaikaisuuteen

Tavallinen HTTP toimii pyyntö–vastaus-periaatteella: asiakas kysyy, palvelin vastaa ja yhteys suljetaan. WebSockets pitää yhden yhteyden avoinna kaksisuuntaista reaaliaikaista viestintää varten. Se sopii erinomaisesti keskusteluihin, reaaliaikaisiin koontinäyttöihin ja ilmoituksiin.

Miksi asynkronisuus sopii WebSocketeihin

WebSocket-yhteys on pitkäkestoinen ja odottaa suurimman osan ajasta viestejä. FastAPI:n async-mallin ansiosta yksi worker voi käsitellä tuhansia samanaikaisia yhteyksiä ilman estymistä.

Minimaalinen WebSocket-päätepiste

Määritä @app.websocket-reitti. Hyväksy yhteys ja käsittele sitten silmukassa viestien vastaanottaminen ja lähettäminen.

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}')

JSONin lähettäminen

Voit vaihtaa rakenteisia tietoja käyttämällä receive_json- ja send_json-metodeja raakatekstin sijaan.

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

Yhteyksien katkeamisen käsittely

Asiakkaat voivat poistua. Ota WebSocketDisconnect kiinni resurssien vapauttamiseksi sen sijaan, että käsittelijä kaatuisi.

from fastapi import WebSocketDisconnect

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

Yhteyksien hallinta

Jotta voit lähettää viestin kaikille, seuraa aktiivisia yhteyksiä hallintaluokassa. Lisää yhteys muodostettaessa ja poista se yhteyden katketessa.

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)

Viestin lähettäminen kaikille

Käy aktiiviset yhteydet silmukassa läpi ja lähetä viesti jokaiselle. Tämä on chat-huoneen perusidea.

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

Lähetyslogiikka puhtaalla Pythonilla

Hallinta tarkoittaa vain listan ylläpitoa. Tässä yhteyden muodostaminen, katkeaminen ja viestin lähettäminen simuloidaan synkronisesti.

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'))

Chat-huoneen päätepiste

Yhdistä osat: muodosta yhteys, lähetä jokainen vastaanotettu viesti kaikille ja käsittele yhteyden katkeaminen.

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)

Yhdestä prosessista laajentaminen

Muistissa oleva hallinta tietää vain oman workerinsa yhteydet. Jos haluat lähettää viestejä useille workereille tai palvelimille, käytä Redis-palvelun kaltaista pub/sub-taustajärjestelmää viestien levittämiseen.

Tietoturva ja rajoitukset

Suojaa WebSocket-päätepisteet:

  • Todennus kättelyn aikana (esimerkiksi kyselyparametrissa tai otsakkeessa olevan tunnuksen avulla).
  • Vahvista saapuvat viestit ja rajoita niiden koko.
  • Käytä heartbeat- tai ping-viestejä kuolleiden yhteyksien havaitsemiseen.

Pikatarkistus

Miksi muistissa oleva yhteyksien hallinta ei pysty lähettämään viestejä oikein kaikille, kun käytössä on useita Uvicorn-workereita?

Kertaus

Lisäsit reaaliaikaisen viestinnän:

  • Hyväksyit WebSocket-yhteyksiä ja vaihdoit tekstiä tai JSONia.
  • Käsittelit WebSocketDisconnect-poikkeukset siististi.
  • Rakensit yhteyksien hallinnan viestien lähettämiseksi useille asiakkaille.
  • Opit skaalaamaan Redis-pub/subilla ja suojaamaan yhteydet.
Aloita maksutta

Opi FastAPI-backend-kehityksen intensiivikurssi tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
21
Oppitunnit
84

Usein kysytyt kysymykset

Onko oppitunti ”WebSockets reaaliaikaiseen viestintään” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa FastAPI-backend-kehityksen intensiivikurssi-oppimispolun 3 oppituntia, myös oppitunnin “WebSockets reaaliaikaiseen viestintään”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. FastAPI-backend-kehityksen intensiivikurssi-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”WebSockets reaaliaikaiseen viestintään”?

Rakentakaa FastAPIlla reaaliaikaisia ominaisuuksia WebSocketsien avulla: hyväksykää yhteyksiä, vaihtakaa viestejä, lähettäkää niitä useille clienteille ja käsitelkää yhteyksien katkeamiset siististi… Harjoittelet FastAPI-backend-kehityksen intensiivikurssi-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni FastAPI-backend-kehityksen intensiivikurssi-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin FastAPI-backend-kehityksen intensiivikurssi-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 4/4.

Kuinka kauan ”WebSockets reaaliaikaiseen viestintään”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä FastAPI-backend-kehityksen intensiivikurssi-oppitunnilla?

Kyllä. Jokainen FastAPI-backend-kehityksen intensiivikurssi-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Pythonin Async/Await-kertaus
  2. FastAPI ja asynkroniset toiminnot
  3. Taustatehtävien suorittaminen
  4. WebSockets reaaliaikaiseen viestintään
← Takaisin: FastAPI-backend-kehityksen intensiivikurssi