Programmering av WebSockets och system i realtid · Lektion

Hantera rum och kanaler

Organisera WebSocket-klienter i rum och kanaler så att meddelanden endast når den relevanta gruppen – grunden för chatt- och samarbetsappar.

Lektion 4 av 413 steg

Hantera rum och kanaler är en gratis lektion i Programmering av WebSockets och system i realtid på CoddyKit. Detta är lektion 4 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för Programmering av WebSockets och system i realtid, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Programmering av WebSockets och system i realtid innehåller totalt 4 lektioner.

Varför rum

Att sända till alla skalar inte för appar med flera ämnen. Rum (eller kanaler) låter Er gruppera klienter så att ett meddelande bara når medlemmarna i en grupp, till exempel ett enskilt chattrum.

Modellera rum

En enkel modell kopplar ett rumsnamn till en mängd klientanslutningar.

const rooms = new Map(); // roomName -> Set<ws>

Gå med i ett rum

När en klient ber om att få gå med lägger Ni till dess anslutning i rummets mängd och skapar mängden första gången den används.

function join(room, ws) {
  if (!rooms.has(room)) rooms.set(room, new Set());
  rooms.get(room).add(ws);
}

Lämna ett rum

Ta bort anslutningen när klienten lämnar och rensa bort tomma rum för att undvika läckor.

function leave(room, ws) {
  const set = rooms.get(room);
  if (!set) return;
  set.delete(ws);
  if (set.size === 0) rooms.delete(room);
}

Ett protokoll för meddelanden om att gå med

Klienter signalerar sin avsikt med strukturerade meddelanden. Tolka typen och dirigera därefter.

ws.on('message', (raw) => {
  const msg = JSON.parse(raw);
  if (msg.type === 'join') join(msg.room, ws);
});

Sända till ett rum

För att skicka till ett rum itererar Ni endast över mängden för det rummet och hoppar över stängda sockets.

function toRoom(room, payload) {
  const set = rooms.get(room);
  if (!set) return;
  for (const client of set) {
    if (client.readyState === 1) client.send(payload);
  }
}

Hålla reda på en klients rum

Lagra rumsmedlemskapet på anslutningen så blir det enkelt att rensa upp vid frånkoppling.

ws.rooms = new Set();

Rensa upp vid frånkoppling

När en socket stängs tar Ni bort den från varje rum som den gick med i.

ws.on('close', () => {
  for (const room of ws.rooms) leave(room, ws);
});

Kanaler kontra rum

Termerna varierar. Ofta är en kanal ett namngivet ämne som klienter prenumererar på, medan ett rum är en privat grupp. Tekniskt sett är båda bara nycklade mängder av prenumeranter.

Närvaromedvetenhet

Ni kan härleda närvaro från medlemskap i rum: storleken på en rumsmängd är antalet medlemmar som är online, och händelser för anslutning och frånkoppling kan meddela andra.

toRoom(room, JSON.stringify({ type: 'presence', count: rooms.get(room).size }));

Bästa praxis

Håll rumshanteringen robust:

  • Rensa alltid upp vid frånkoppling
  • Hoppa över sockets som inte är i tillståndet OPEN
  • Validera rumsnamn från klienter
  • Ta bort tomma rum för att frigöra minne

Snabbtest

Testa era kunskaper om rum.

Sammanfattning

Ni lade till rum i er WebSocket-server:

  • Mappa rumsnamn till mängder av anslutningar
  • Hantera anslutning och frånkoppling via strukturerade meddelanden
  • Skicka endast till medlemmarna i ett rum
  • Rensa upp vid frånkoppling och härled närvaro

Detta är grunden för chatt- och samarbetsfunktioner.

Gratis att börja

Lär dig Programmering av WebSockets och system i realtid med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
12
Lektioner
47

Vanliga frågor

Är lektionen ”Hantera rum och kanaler” gratis?

Ja – hela texten till ”Hantera rum och kanaler” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i Programmering av WebSockets och system i realtid, kan Ni uppgradera till CoddyKit PRO. Kursen i Programmering av WebSockets och system i realtid innehåller totalt 4 lektioner.

Vad lär jag mig i ”Hantera rum och kanaler”?

Organisera WebSocket-klienter i rum och kanaler så att meddelanden endast når den relevanta gruppen – grunden för chatt- och samarbetsappar. Ni övar på Programmering av WebSockets och system i realtid med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Programmering av WebSockets och system i realtid?

Du behöver inga förkunskaper. Utbildningen i Programmering av WebSockets och system i realtid på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 4 av 4.

Hur lång tid tar lektionen ”Hantera rum och kanaler”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Programmering av WebSockets och system i realtid-lektionen?

Ja. Varje Programmering av WebSockets och system i realtid-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Konfigurera ett Node.js-projekt
  2. Implementera logik på serversidan
  3. Skicka broadcast-meddelanden till klienter
  4. Hantera rum och kanaler
← Tillbaka till Programmering av WebSockets och system i realtid