Kringkasting av meldinger til klienter
Lær å sende meldinger fra serveren til alle tilkoblede klienter eller til bestemte klienter.
Kringkasting av meldinger til klienter er en gratis leksjon i Programmering av WebSockets og sanntidssystemer på CoddyKit. Dette er leksjon 3 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Programmering av WebSockets og sanntidssystemer, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Programmering av WebSockets og sanntidssystemer inneholder totalt 4 leksjoner.
Hva er kringkasting?
Sanntidsapplikasjoner trenger ofte å sende oppdateringer til mange brukere samtidig. Tenk for eksempel på en direkte sportsstilling eller et chatterom.
Kringkasting betyr at serveren sender én melding som leveres til alle klienter som er tilkoblet for øyeblikket.
Hvorfor kringkaste meldinger?
Kringkasting er et grunnleggende mønster i mange interaktive applikasjoner:
- Direkteoppdateringer: Aksjekurser, nyhetsvarsler og sensordata.
- Chatterom: Nye meldinger som er synlige for alle deltakerne.
- Varsler: Systemomfattende varsler til alle aktive brukere.
- Flerspillerspill: Spillerbevegelser og endringer i spilltilstanden for alle spillerne.
Serverens klientliste
For å kringkaste må WebSocket-serveren vite hvem som er tilkoblet. ws-biblioteket (Node.js-biblioteket vårt for WebSocket-servere) holder automatisk oversikt over alle aktive tilkoblinger.
Når en klient kobler seg til, legges WebSocket-objektet dens til i en intern liste. Når klienten kobler seg fra, fjernes det.
Få tilgang til tilkoblede klienter
ws-biblioteket eksponerer egenskapen wss.clients. Dette er et JavaScript-Set som inneholder alle WebSocket-klientobjektene som er tilkoblet for øyeblikket.
Vi kan iterere over dette Set-et for å sende meldinger til hver enkelt klient.
Implementere full kringkasting
Slik endrer du serveren slik at den kringkaster alle meldinger den mottar, til alle tilkoblede 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');Gjennomgang av kringkastingskoden
La oss se nærmere på kringkastingslogikken:
wss.clients.forEach(client => { ... }): Denne løkken går gjennom hver klient i mengden av tilkoblede klienter.if (client !== ws && client.readyState === WebSocket.OPEN): Vi kontrollerer at klienten ikke er avsenderen (slik at meldingen ikke sendes tilbake til avsenderen to ganger), og at tilkoblingen fortsatt er åpen.client.send(`Broadcast: ${msg}`);: Dette er det magiske! Koden sender meldingen til den aktuelle klienten.
Teste kringkastingen
Start Node.js-serveren for å teste dette. Åpne deretter flere nettleserfaner eller klientapplikasjoner som alle kobler seg til ws://localhost:8080.
Når du sender en melding fra én klient, skal den vises hos alle andre tilkoblede klienter!
Målrettet meldingssending
Kringkasting er kraftig, men hva om du bare trenger å sende en melding til én eller noen få bestemte klienter, ikke til alle?
Dette kalles målrettet meldingssending. Eksempler er private chatmeldinger, direkte varsler til brukere eller statusoppdateringer for bestemte administratorbrukere.
Identifisere bestemte klienter
ws-biblioteket gir ikke klientene unike ID-er som du kan bruke til målretting. Dette må du implementere selv:
- Når en klient kobler seg til, tildeler du den en unik ID (for eksempel en UUID).
- Du lagrer denne ID-en sammen med
ws-objektet i enMapeller et objekt på serveren. - Når en klient sender en melding som krever et målrettet svar, kan meldingen inneholde klientens ID.
Enkelt eksempel på målrettet sending
La oss lage et grunnleggende eksempel med en server som *bare* sender en melding tilbake til klienten som sendte den (et direkte ekkosvar). Dette viser hvordan du sender til ett enkelt 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 kringkasting
Du bygger en chatapplikasjon i sanntid. Når en bruker sender en melding, vil du at *alle* andre brukere i det samme chatterommet skal se meldingen.
Oppsummering og neste steg
Fantastisk jobbet! Du har fått kontroll på hvordan du sender meldinger fra Node.js-WebSocket-serveren din:
- Kringkasting: Sende en melding til alle tilkoblede klienter ved å gå gjennom
wss.clients. - Målrettet meldingssending: Sende til en bestemt klient ved hjelp av klientens individuelle
ws-objekt.
Disse teknikkene er avgjørende for å bygge dynamiske og interaktive sanntidsapplikasjoner. Deretter skal vi se nærmere på hvordan klienter kobler seg til og samhandler med disse meldingene fra serversiden!
Lær deg Programmering av WebSockets og sanntidssystemer med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 12
- Leksjoner
- 47
Ofte stilte spørsmål
Er leksjonen «Kringkasting av meldinger til klienter» gratis?
Ja – hele teksten i «Kringkasting av meldinger til klienter» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av Programmering av WebSockets og sanntidssystemer-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Programmering av WebSockets og sanntidssystemer inneholder totalt 4 leksjoner.
Hva lærer jeg i «Kringkasting av meldinger til klienter»?
Lær å sende meldinger fra serveren til alle tilkoblede klienter eller til bestemte klienter. Du øver på Programmering av WebSockets og sanntidssystemer med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med Programmering av WebSockets og sanntidssystemer?
Ingen tidligere erfaring er nødvendig. Programmering av WebSockets og sanntidssystemer på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 3 av 4.
Hvor lang tid tar leksjonen «Kringkasting av meldinger til klienter»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne Programmering av WebSockets og sanntidssystemer-leksjonen?
Ja. Alle Programmering av WebSockets og sanntidssystemer-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- Sette opp et Node.js-prosjekt
- Implementering av logikk på serversiden
- Kringkasting av meldinger til klienter
- Håndtering av rom og kanaler