Pub/Sub-backplane med Redis
Forbind flere WebSocket-serverinstanser med en Redis pub/sub-backplane, så beskeder når klienterne, uanset hvilken node de har oprettet forbindelse til.
Pub/Sub-backplane med Redis er en gratis WebSockets og programmering af realtidssystemer-lektion på CoddyKit. Dette er lektion 4 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i WebSockets og programmering af realtidssystemer, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. WebSockets og programmering af realtidssystemer-kurset indeholder 4 lektioner i alt.
Problemet med flere instanser
Når du skalerer vandret, opretter klienter forbindelse til forskellige serverinstanser. En meddelelse, der publiceres på node A, når ikke en klient, der er forbundet til node B, medmindre noderne deler den.
Hvad en bagplan gør
En bagplan er en delt kanal, som alle instanser abonnerer på. Når én node modtager en meddelelse, publicerer den den til bagplanen, og alle noder leverer den til deres lokale klienter.
Hvorfor Redis Pub/Sub
Redis pub/sub er hurtigt, enkelt og bredt tilgængeligt. Udgivere sender til en kanal, og alle abonnenter modtager meddelelsen med det samme, hvilket gør det til en naturlig bagplan.
To Redis-forbindelser
Redis kræver separate klienter til publicering og abonnement, fordi en forbindelse med et aktivt abonnement ikke kan køre normale kommandoer.
const pub = redis.createClient();
const sub = redis.createClient();
await pub.connect();
await sub.connect();Abonnement ved opstart
Hver instans abonnerer på den delte kanal, når den starter.
await sub.subscribe('ws-broadcast', (message) => {
deliverLocally(JSON.parse(message));
});Publicering på tværs af noder
I stedet for kun at sende til lokale sockets skal du publicere til Redis, så alle noder modtager meddelelsen.
function broadcast(payload) {
pub.publish('ws-broadcast', JSON.stringify(payload));
}Lokal levering
Tilbagekaldet for abonnement sender meddelelsen videre til de klienter, der er forbundet til netop den instans.
function deliverLocally(payload) {
for (const client of localClients) {
if (client.readyState === 1) client.send(JSON.stringify(payload));
}
}Undgå ekkoløkker
Da den publicerende node også modtager sin egen meddelelse via abonnementet, skal du kun levere gennem bagplanens sti, så hver meddelelse sendes én gang i stedet for to.
Afgrænsning efter rum
For rum-baserede apps skal du inkludere rummet i nyttelasten og lade hver node kun levere til sine lokale medlemmer af rummet, så antallet af kanaler i bagplanen holdes lavt.
pub.publish('ws-broadcast', JSON.stringify({ room: 'chat-1', data }));Begrænsninger ved Redis Pub/Sub
Redis pub/sub fungerer efter princippet send-og-glem: Abonnenter, der er offline, går glip af meddelelser, og der er ingen lagring. Hvis du har brug for holdbarhed eller afspilning, kan du overveje Redis Streams eller en dedikeret meddelelsesbroker.
Bedste praksis
Driv en sund bagplan:
- Brug separate klienter til publicering og abonnement
- Send alle udsendelser gennem bagplanen
- Afgræns meddelelser efter rum for at reducere arbejdet
- Vær opmærksom på, at pub/sub ikke gemmer meddelelser
Hurtigt tjek
Test din viden om bagplaner.
Opsummering
Du har sat en Redis pub/sub-bagplan op:
- Brug separate klienter til publicering og abonnement
- Publicér udsendelser til en delt kanal
- Hver node leverer til sine lokale klienter
- Afgræns efter rum, og acceptér begrænsningerne ved send-og-glem
Din WebSocket-app kan nu skaleres på tværs af mange instanser.
Lær WebSockets og programmering af realtidssystemer med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 12
- Lektioner
- 47
Ofte stillede spørgsmål
Er lektionen “Pub/Sub-backplane med Redis” gratis?
Ja — hele teksten til “Pub/Sub-backplane med Redis” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af WebSockets og programmering af realtidssystemer-kurset, skal du opgradere til CoddyKit PRO. WebSockets og programmering af realtidssystemer-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Pub/Sub-backplane med Redis”?
Forbind flere WebSocket-serverinstanser med en Redis pub/sub-backplane, så beskeder når klienterne, uanset hvilken node de har oprettet forbindelse til. Du øver dig i WebSockets og programmering af realtidssystemer med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på WebSockets og programmering af realtidssystemer?
Der kræves ingen tidligere erfaring. WebSockets og programmering af realtidssystemer på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 4 af 4.
Hvor lang tid tager lektionen “Pub/Sub-backplane med Redis”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne WebSockets og programmering af realtidssystemer-lektion?
Ja. Alle WebSockets og programmering af realtidssystemer-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Strategier til horisontal skalering
- Load balancing af WebSockets
- Distribueret tilstandshåndtering
- Pub/Sub-backplane med Redis