WebSockets- ja reaaliaikaisten järjestelmien ohjelmointi · Oppitunti

Pub/Sub-taustajärjestelmä Redisillä

Yhdistäkää useita WebSocket-palvelininstansseja Redis pub/sub -taustajärjestelmällä, jotta viestit saavuttavat clientit riippumatta siitä, mihin solmuun ne yhdistettiin.

Oppitunti 4/413 vaihetta

Pub/Sub-taustajärjestelmä Redisillä on ilmainen WebSockets- ja reaaliaikaisten järjestelmien ohjelmointi-oppitunti CoddyKitissä. Tämä on oppitunti 4/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu WebSockets- ja reaaliaikaisten järjestelmien ohjelmointi-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. WebSockets- ja reaaliaikaisten järjestelmien ohjelmointi-kurssilla on yhteensä 4 oppituntia.

Usean instanssin ongelma

Kun skaalatte vaakasuunnassa, asiakkaat muodostavat yhteyden eri palvelininstansseihin. Solmussa A julkaistu viesti ei saavuta solmuun B yhdistettyä asiakasta, elleivät solmut jaa viestiä keskenään.

Backplanen tehtävä

Backplane on jaettu kanava, jota jokainen instanssi kuuntelee. Kun yksi solmu vastaanottaa viestin, se julkaisee sen backplaneen, ja kaikki solmut toimittavat sen omille paikallisille asiakkailleen.

Miksi Redis Pub/Sub

Redis pub/sub on nopea, yksinkertainen ja laajasti saatavilla. Julkaisijat lähettävät viestejä kanavalle, ja kaikki tilaajat vastaanottavat ne välittömästi, joten se sopii luontevasti backplaneeksi.

Kaksi Redis-yhteyttä

Redis edellyttää erillisiä asiakkaita julkaisemista ja tilaamista varten, koska tilattu yhteys ei voi suorittaa tavallisia komentoja.

const pub = redis.createClient();
const sub = redis.createClient();
await pub.connect();
await sub.connect();

Tilaaminen käynnistyksen yhteydessä

Jokainen instanssi tilaa jaetun kanavan, kun se käynnistyy.

await sub.subscribe('ws-broadcast', (message) => {
  deliverLocally(JSON.parse(message));
});

Julkaiseminen solmujen välillä

Sen sijaan että lähettäisitte viestin vain paikallisille socketeille, julkaiskaa se Redisissä, jotta jokainen solmu vastaanottaa sen.

function broadcast(payload) {
  pub.publish('ws-broadcast', JSON.stringify(payload));
}

Paikallinen toimitus

Tilaamisen callback-funktio välittää viestin kyseiseen instanssiin yhdistetyille asiakkaille.

function deliverLocally(payload) {
  for (const client of localClients) {
    if (client.readyState === 1) client.send(JSON.stringify(payload));
  }
}

Kaikukehien välttäminen

Koska myös julkaiseva solmu vastaanottaa oman viestinsä tilaamisen kautta, välittäkää viesti vain backplane-polun kautta, jotta kukin viesti lähetetään kerran eikä kahdesti.

Rajaus huoneen perusteella

Huoneisiin perustuvissa sovelluksissa sisällyttäkää huone kuormaan ja antakaa kunkin solmun toimittaa viesti vain kyseisen huoneen paikallisille jäsenille. Näin backplane-kanavien määrä pysyy pienenä.

pub.publish('ws-broadcast', JSON.stringify({ room: 'chat-1', data }));

Redis Pub/Subin rajoitukset

Redis pub/sub toimii fire-and-forget-periaatteella: offline-tilassa olevat tilaajat menettävät viestit, eikä viestejä säilytetä. Jos tarvitsette kestävyyttä tai viestien uudelleentoistoa, harkitkaa Redis Streamsia tai erillistä välittäjää.

Parhaat käytännöt

Ylläpitäkää toimivaa backplanea:

  • Käyttäkää erillisiä julkaisu- ja tilaaja-asiakkaita
  • Reitittäkää kaikki yleislähetykset backplanen kautta
  • Rajaatkaa viestit huoneen perusteella työn vähentämiseksi
  • Muistakaa, ettei pub/sub säilytä viestejä

Pikatarkistus

Testatkaa backplanea koskevat tietonne.

Kertaus

Yhdistitte Redis pub/sub -backplanen:

  • Käyttäkää erillisiä julkaisu- ja tilaaja-asiakkaita
  • Julkaiskaa yleislähetykset jaetulle kanavalle
  • Kukin solmu toimittaa viestit paikallisille asiakkailleen
  • Rajaatkaa viestit huoneen perusteella ja huomioikaa fire-and-forget-rajoitukset

WebSocket-sovelluksenne skaalautuu nyt useiden instanssien välillä.

Aloita maksutta

Opi WebSockets- ja reaaliaikaisten järjestelmien ohjelmointi 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
12
Oppitunnit
47

Usein kysytyt kysymykset

Onko oppitunti ”Pub/Sub-taustajärjestelmä Redisillä” ilmainen?

Kyllä – oppitunnin ”Pub/Sub-taustajärjestelmä Redisillä” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko WebSockets- ja reaaliaikaisten järjestelmien ohjelmointi-kurssin, päivitä CoddyKit PROhon. WebSockets- ja reaaliaikaisten järjestelmien ohjelmointi-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Pub/Sub-taustajärjestelmä Redisillä”?

Yhdistäkää useita WebSocket-palvelininstansseja Redis pub/sub -taustajärjestelmällä, jotta viestit saavuttavat clientit riippumatta siitä, mihin solmuun ne yhdistettiin. Harjoittelet WebSockets- ja reaaliaikaisten järjestelmien ohjelmointi-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni WebSockets- ja reaaliaikaisten järjestelmien ohjelmointi-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin WebSockets- ja reaaliaikaisten järjestelmien ohjelmointi-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 4/4.

Kuinka kauan ”Pub/Sub-taustajärjestelmä Redisillä”-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ä WebSockets- ja reaaliaikaisten järjestelmien ohjelmointi-oppitunnilla?

Kyllä. Jokainen WebSockets- ja reaaliaikaisten järjestelmien ohjelmointi-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. Vaakasuoran skaalauksen strategiat
  2. WebSocket-yhteyksien kuormantasaus
  3. Hajautettu tilanhallinta
  4. Pub/Sub-taustajärjestelmä Redisillä
← Takaisin: WebSockets- ja reaaliaikaisten järjestelmien ohjelmointi