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.
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.
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
- Pythonin Async/Await-kertaus
- FastAPI ja asynkroniset toiminnot
- Taustatehtävien suorittaminen
- WebSockets reaaliaikaiseen viestintään