Programmering av WebSockets och system i realtid · Lektion

Skicka broadcast-meddelanden till klienter

Lär er skicka meddelanden från servern till alla anslutna klienter eller till utvalda klienter.

Lektion 3 av 412 steg

Skicka broadcast-meddelanden till klienter är en gratis lektion i Programmering av WebSockets och system i realtid på CoddyKit. Detta är lektion 3 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.

Vad är utsändning?

Realtidsapplikationer behöver ofta skicka uppdateringar till många användare samtidigt. Föreställ dig ett direktsänt sportresultat eller ett chattrum.

Utsändning innebär att servern skickar ett enda meddelande som levereras till alla klienter som för närvarande är anslutna.

Varför skicka ut meddelanden?

Utsändning är ett grundläggande mönster i många interaktiva applikationer:

  • Direkta uppdateringar: Aktiekurser, nyhetsnotiser och sensordata.
  • Chattrum: Nya meddelanden som syns för alla deltagare.
  • Notiser: Systemomfattande aviseringar till alla aktiva användare.
  • Flerspelarspel: Spelares rörelser och förändringar i speltillståndet för alla spelare.

Serverns klientlista

För att kunna skicka ut meddelanden måste WebSocket-servern veta vilka som är anslutna. Biblioteket ws (vårt Node.js-bibliotek för WebSocket-servrar) håller automatiskt reda på alla aktiva anslutningar.

När en klient ansluter läggs dess WebSocket-objekt till i en intern lista. När klienten kopplar från tas objektet bort.

Åtkomst till anslutna klienter

Biblioteket ws tillhandahåller egenskapen wss.clients. Det är en JavaScript-Set som innehåller alla WebSocket-klientobjekt som för närvarande är anslutna.

Vi kan iterera över denna Set för att skicka meddelanden till varje enskild klient.

Implementera fullständig utsändning

Så här ändrar du servern så att alla meddelanden den tar emot skickas ut till alla anslutna klienter:

const WebSocket = require('ws');
const wss = new WebSocket.Server({ port: 8080 });

wss.on('connection', ws => {
  console.log('Client connected');

  ws.on('message', message => {
    // Convert Buffer to string for display/processing
    const msg = message.toString();
    console.log(`Received: ${msg}`);
    
    // Broadcast the received message to all connected clients
    wss.clients.forEach(client => {
      if (client !== ws && client.readyState === WebSocket.OPEN) {
        client.send(`Broadcast: ${msg}`);
      }
    });
    
    // Also send back to the sender as confirmation
    if (ws.readyState === WebSocket.OPEN) {
      ws.send(`You sent: ${msg}`);
    }
  });

  ws.on('close', () => {
    console.log('Client disconnected');
  });

  ws.send('Welcome to the broadcast server!');
});

console.log('WebSocket server started on port 8080');

Genomgång av koden för utsändning

Låt oss gå igenom logiken för utsändning:

  • wss.clients.forEach(client => { ... }): Den här loopen går igenom varje klient i mängden av anslutna klienter.
  • if (client !== ws && client.readyState === WebSocket.OPEN): Vi kontrollerar att klienten inte är avsändaren, så att meddelandet inte ekas tillbaka till den två gånger, och att anslutningen fortfarande är öppen.
  • client.send(`Broadcast: ${msg}`);: Det är här det händer! Meddelandet skickas till just den klienten.

Testa utsändningen

Starta Node.js-servern för att testa detta. Öppna sedan flera webbläsarflikar eller klientapplikationer som alla ansluter till ws://localhost:8080.

När du skickar ett meddelande från en klient bör det visas hos alla andra anslutna klienter!

Riktad meddelandehantering

Utsändning är kraftfullt, men vad gör du om du behöver skicka ett meddelande till bara en eller några få specifika klienter, i stället för till alla?

Detta kallas riktad meddelandehantering. Exempel är privata chattmeddelanden, direkta användarnotiser eller statusuppdateringar för specifika administratörsanvändare.

Identifiera specifika klienter

Biblioteket ws ger inte klienterna unika ID:n som du kan använda för att rikta meddelanden. Du behöver implementera detta själv:

  • När en klient ansluter tilldelar du den ett unikt ID, till exempel ett UUID.
  • Lagra detta ID tillsammans med ws-objektet i en Map eller ett objekt på servern.
  • När en klient skickar ett meddelande som kräver ett riktat svar kan meddelandet innehålla klientens ID.

Enkelt exempel på riktad kommunikation

Som ett grundläggande exempel skapar vi en server som *endast* skickar tillbaka ett meddelande till klienten som skickade det, alltså ett direkt eko. Det visar hur du skickar till ett enda ws-objekt.

const WebSocket = require('ws');
const wss = new WebSocket.Server({ port: 8081 }); // Use a different port

wss.on('connection', ws => {
  console.log('Client connected for targeted example');

  ws.on('message', message => {
    const msg = message.toString();
    console.log(`Received: ${msg}`);
    
    // Send the message back ONLY to the client that sent it
    if (ws.readyState === WebSocket.OPEN) {
      ws.send(`You said: ${msg}`);
    }
  });

  ws.on('close', () => {
    console.log('Client disconnected from targeted example');
  });

  ws.send('Welcome! I will only talk directly to you.');
});

console.log('Targeted WebSocket server started on port 8081');

Kontroll av utsändning

Du bygger en chattapplikation i realtid. När en användare skickar ett meddelande vill du att *alla* andra användare i samma chattrum ska se meddelandet.

Sammanfattning och nästa steg

Utmärkt arbete! Du behärskar nu hur du skickar meddelanden från din Node.js-WebSocket-server:

  • Utsändning: Skicka ett meddelande till alla anslutna klienter genom att iterera över wss.clients.
  • Riktad meddelandehantering: Skicka till en specifik klient med dess enskilda ws-objekt.

Dessa tekniker är avgörande för att bygga dynamiska och interaktiva realtidsapplikationer. Härnäst går vi igenom hur klienter ansluter och samverkar med dessa meddelanden från serversidan!

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 ”Skicka broadcast-meddelanden till klienter” gratis?

Ja – hela texten till ”Skicka broadcast-meddelanden till klienter” 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 ”Skicka broadcast-meddelanden till klienter”?

Lär er skicka meddelanden från servern till alla anslutna klienter eller till utvalda klienter. 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 3 av 4.

Hur lång tid tar lektionen ”Skicka broadcast-meddelanden till klienter”?

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