GraphQL-abonnementer for sanntidsdata
Legg til sanntidsfunksjonalitet i GraphQL-API-et Deres med abonnementer, slik at klientene mottar løpende oppdateringer over WebSockets straks dataene endres.
GraphQL-abonnementer for sanntidsdata er en gratis leksjon i Bootcamp i backendutvikling med Node.js på CoddyKit. Dette er leksjon 4 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 Bootcamp i backendutvikling med Node.js, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Bootcamp i backendutvikling med Node.js inneholder totalt 4 leksjoner.
De tre GraphQL-operasjonene
GraphQL definerer tre typer rotoperasjoner:
- Query: leser data
- Mutation: endrer data
- Subscription: mottar en strøm av løpende oppdateringer
Spørringer og mutasjoner følger mønsteret forespørsel/svar, mens abonnementer holder en tilkobling åpen for pågående hendelser.
Når bør De bruke abonnementer?
Abonnementer er nyttige når klienter trenger data i sanntid:
- Chatmeldinger
- Direkte varsler
- Samarbeidsredigering
- Dashbord og resultater i sanntid
For data som sjelden endres, er det enklere å hente en spørring med jevne mellomrom.
WebSockets under panseret
Spørringer og mutasjoner sendes over HTTP, men abonnementer trenger en vedvarende kanal i begge retninger – en WebSocket. Serveren sender hendelser til abonnerende klienter uten at de må spørre på nytt.
Definere et abonnement i skjemaet
Legg til en Subscription-type i skjemaet med felt som klienter kan abonnere på. Hvert felt er en hendelsesstrøm som returnerer en bestemt type.
type Subscription {
messageAdded(channelId: ID!): Message!
}PubSub-motoren
Abonnementer er avhengige av et publiser/abonner-system. En PubSub-instans lar resolverne publisere hendelser, mens abonnementene lytter etter dem.
const { PubSub } = require('graphql-subscriptions');
const pubsub = new PubSub();Publisere en hendelse
Publiser en hendelse på et navngitt emne inne i en mutasjon etter at dataene er lagret. Alle som abonnerer på emnet, mottar nyttelasten.
const message = await Message.create(input);
pubsub.publish('MESSAGE_ADDED', { messageAdded: message });
return message;Abonnementsresolveren
En abonnementsresolver returnerer en asynkron iterator via asyncIterator, som forteller serveren hvilket emne som skal videresendes til klienten.
const resolvers = {
Subscription: {
messageAdded: {
subscribe: () => pubsub.asyncIterator('MESSAGE_ADDED')
}
}
};Filtrere hendelser
Ofte er en klient bare interessert i hendelser for én kanal. withFilter pakker inn iteratoren og videresender bare hendelser som samsvarer med argumentene til abonnementet.
const { withFilter } = require('graphql-subscriptions');
subscribe: withFilter(
() => pubsub.asyncIterator('MESSAGE_ADDED'),
(payload, vars) => payload.messageAdded.channelId === vars.channelId
)Abonnementsforespørsel fra klienten
Klienten skriver en abonnementsoperasjon på samme måte som en spørring, men med nøkkelordet subscription. Serveren strømmer resultatene etter hvert som de oppstår.
subscription OnMessage($id: ID!) {
messageAdded(channelId: $id) {
id
text
}
}Skalere på tvers av servere
PubSub i minnet fungerer bare på én instans. For å kringkaste til mange servere kan De bytte til en backend som graphql-redis-subscriptions, slik at hendelsene når alle tilkoblede klienter.
const { RedisPubSub } = require('graphql-redis-subscriptions');
const pubsub = new RedisPubSub();Rydde opp i tilkoblinger
Åpne WebSockets bruker ressurser. Serveren bør oppdage frakoblinger og stoppe strømmingen. Apollo Server håndterer mye av dette, men vær oppmerksom på foreldreløse abonnementer og autentiser tilkoblingen ved oppsett.
Hurtigsjekk
Test kunnskapene dine om GraphQL-abonnementer.
Oppsummering
Du har lagt til sanntidsdata med GraphQL-abonnementer:
- Abonnementer strømmer sanntidshendelser over WebSockets
- Deklarer en
Subscription-type og løs den medasyncIterator - Mutasjoner
publish-er hendelser;withFilterretter dem mot de riktige klientene - Skaler på tvers av servere med en Redis-støttet PubSub, og rydd opp i tilkoblinger
Nå kan API-et ditt drive chat, varsler og instrumentpaneler med sanntidsdata.
Lær deg JavaScript 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
- 22
- Leksjoner
- 92
Ofte stilte spørsmål
Er leksjonen «GraphQL-abonnementer for sanntidsdata» gratis?
Ja – hele teksten i «GraphQL-abonnementer for sanntidsdata» 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 Bootcamp i backendutvikling med Node.js-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Bootcamp i backendutvikling med Node.js inneholder totalt 4 leksjoner.
Hva lærer jeg i «GraphQL-abonnementer for sanntidsdata»?
Legg til sanntidsfunksjonalitet i GraphQL-API-et Deres med abonnementer, slik at klientene mottar løpende oppdateringer over WebSockets straks dataene endres. Du øver på Bootcamp i backendutvikling med Node.js 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 Bootcamp i backendutvikling med Node.js?
Ingen tidligere erfaring er nødvendig. Bootcamp i backendutvikling med Node.js 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 4 av 4.
Hvor lang tid tar leksjonen «GraphQL-abonnementer for sanntidsdata»?
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 Bootcamp i backendutvikling med Node.js-leksjonen?
Ja. Alle Bootcamp i backendutvikling med Node.js-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
- Introduksjon til serverless med Node.js
- Prinsipper for GraphQL API-design
- Bygge en GraphQL-server med Apollo
- GraphQL-abonnementer for sanntidsdata