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.
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ä.
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
- Vaakasuoran skaalauksen strategiat
- WebSocket-yhteyksien kuormantasaus
- Hajautettu tilanhallinta
- Pub/Sub-taustajärjestelmä Redisillä