tRPC:n tyyppiturvalliset API:t päästä päähän · Oppitunti

WebSocketien määrittäminen tilauksia varten

Määrittäkää WebSocket-palvelin ja integroikaa se tRPC-taustajärjestelmäänne reaaliaikaisen viestinnän mahdollistamiseksi.

Oppitunti 2/411 vaihetta

WebSocketien määrittäminen tilauksia varten on ilmainen tRPC:n tyyppiturvalliset API:t päästä päähän-oppitunti CoddyKitissä. Tämä on oppitunti 2/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu tRPC:n tyyppiturvalliset API:t päästä päähän-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. tRPC:n tyyppiturvalliset API:t päästä päähän-kurssilla on yhteensä 4 oppituntia.

Reaaliaikaisuus WebSockets-yhteyksillä

Nykyaikaisia verkkosovelluksia rakennettaessa reaaliaikaiset päivitykset ovat usein välttämättömiä. Ajatelkaa esimerkiksi reaaliaikaista chatia, pörssikursseja tai ilmoitusjärjestelmiä.

Perinteiset HTTP-pyynnöt ovat tilattomia ja lyhytkestoisia. WebSockets tarjoaa pysyvän kaksisuuntaisen viestintäkanavan asiakkaan ja palvelimen välille.

  • Pysyvä: Yhteys pysyy avoinna toisin kuin HTTP-yhteys.
  • Kaksisuuntainen: Sekä asiakas että palvelin voivat lähettää viestejä milloin tahansa.
  • Tehokas: Kuormitus on pienempi kuin jatkuvassa HTTP-kyselyssä.

WebSocket-palvelimen perusmääritys

Ennen tRPC:n integrointia tutustutaan erillisen WebSocket-palvelimen toimintaan. Käytämme suosittua Node.js:n ws-kirjastoa.

Asentakaa ensin tarvittavat paketit: npm install ws typescript ts-node

Tämä peruspalvelin kuuntelee yhteyksiä ja kirjaa lokiin, kun asiakkaat muodostavat yhteyden tai lähettävät viestejä.

import ws from 'ws';

const wss = new ws.Server({ port: 3001 });

wss.on('connection', (socket) => {
  console.log('Client connected to raw WS!');

  socket.on('message', (message) => {
    console.log(`Received: ${message}`);
    socket.send(`Echo: ${message}`);
  });

  socket.on('close', () => {
    console.log('Client disconnected from raw WS!');
  });

  socket.send('Welcome to the raw WS server!');
});

console.log('Raw WS server listening on ws://localhost:3001');

tRPC:n WebSocket-sovitin

tRPC tarvitsee tavan viestiä WebSocket-protokollan kautta. Tässä auttaa @trpc/server/adapters/ws.

Tämän sovittimen avulla tRPC-proseduurit voidaan tuoda käytettäväksi olemassa olevaan WebSocket-palvelimeen ja käsitellä sen kautta, kuten juuri näkemässämme ws-palvelimessa.

Asentakaa se: npm install @trpc/server @trpc/server/adapters/ws

tRPC-reitittimen valmistelu

Jotta tRPC voi käsitellä tilauksia WebSockets-yhteyksien kautta, tarvitsette tRPC-reitittimen ja kontekstitehtaan. Tämä muistuttaa HTTP-rajapinnan määrittämistä, mutta on tarkoitettu reaaliaikaiseen viestintään.

Määritellään minimaalinen tRPC-määritys. Lisäämme seuraavaksi yksinkertaisen tilausproseduurin.

import { initTRPC } from '@trpc/server';

// Create a tRPC instance
const t = initTRPC.create();

// Define your application router
export const appRouter = t.router({
  // This will hold our subscription procedures
  healthcheck: t.procedure.query(() => 'ok'),
});

// Export the router's type for client-side usage
export type AppRouter = typeof appRouter;

// Context factory (can be empty for now)
export const createContext = () => ({});

tRPC:n integrointi WS-palvelimeen

Yhdistetään nyt ws-palvelin tRPC-reitittimeen sovittimen applyWSSHandler-funktion avulla.

Tämä funktio yhdistää tRPC-proseduurit WebSocket-yhteyteen ja mahdollistaa niiden käytön reaaliaikaisessa vuorovaikutuksessa.

  • wss: WebSocket-palvelininstanssi.
  • router: tRPC:n appRouter.
  • createContext: Funktio, joka luo tRPC-kontekstin kutakin pyyntöä varten.
import { applyWSSHandler } from '@trpc/server/adapters/ws';
import ws from 'ws';
import { appRouter, createContext } from './trpc'; // Assuming trpc.ts from previous scene

const wss = new ws.Server({ port: 3001 });

const handler = applyWSSHandler({
  wss,
  router: appRouter,
  createContext,
});

wss.on('connection', (socket) => {
  console.log(`tRPC WS client connected! Total: ${wss.clients.size}`);
  socket.once('close', () => {
    console.log(`tRPC WS client disconnected! Total: ${wss.clients.size}`);
  });
});

console.log('tRPC WS server listening on ws://localhost:3001');

// Optional: Handle graceful shutdown
process.on('SIGTERM', () => {
  console.log('SIGTERM received, closing WS server');
  handler.broadcastReconnectNotification(); // Notify clients to reconnect
  wss.close();
});

Yksinkertaisen tilauksen luominen

tRPC-tilaukset käyttävät observable-mallia. Observable on tietovirta, johon asiakas voi liittyä ja saada päivityksiä ajan mittaan.

Tässä luomme yksinkertaisen onHello-tilauksen, joka lähettää heti tervehdyksen ja siivoaa sen jälkeen resurssit.

// Inside your trpc.ts (update appRouter definition)
import { observable } from '@trpc/server/observable';

export const appRouter = t.router({
  healthcheck: t.procedure.query(() => 'ok'),
  onHello: t.procedure.subscription(() => {
    return observable<string>((emit) => {
      // Send a message immediately when subscribed
      emit.next('Hello from tRPC WebSocket!');

      // This function runs when the client unsubscribes
      return () => {
        console.log('Client unsubscribed from onHello');
      };
    });
  }),
});

tRPC:n WebSocket-palvelimen koko koodi

Tässä on palvelinpuolen täydellinen määritys. Voitte tallentaa sen nimellä server.ts ja suorittaa komennolla ts-node server.ts.

Se yhdistää tRPC-reitittimen ja tilauksen, ws-palvelimen sekä integroinnin applyWSSHandler-funktion avulla.

import { initTRPC } from '@trpc/server';
import { applyWSSHandler } from '@trpc/server/adapters/ws';
import ws from 'ws';
import { observable } from '@trpc/server/observable';

// 1. tRPC Setup
const t = initTRPC.create();

const appRouter = t.router({
  healthcheck: t.procedure.query(() => 'ok'),
  onHello: t.procedure.subscription(() => {
    return observable<string>((emit) => {
      emit.next('Hello from tRPC WebSocket!');
      return () => { /* optional cleanup */ };
    });
  }),
});

export type AppRouter = typeof appRouter;
const createContext = () => ({});

// 2. WebSocket Server Setup
const wss = new ws.Server({ port: 3001 });

// 3. Integrate tRPC with WS Server
const handler = applyWSSHandler({
  wss,
  router: appRouter,
  createContext,
});

wss.on('connection', (socket) => {
  console.log(`Client connected! Total: ${wss.clients.size}`);
  socket.once('close', () => {
    console.log(`Client disconnected! Total: ${wss.clients.size}`);
  });
});

console.log('tRPC WebSocket Server listening on ws://localhost:3001');

// 4. Graceful shutdown
process.on('SIGTERM', () => {
  console.log('SIGTERM received, closing WS server');
  handler.broadcastReconnectNotification();
  wss.close();
});

WebSocket-linkki asiakaspuolella

Asiakaspuolella tRPC-asiakas on määritettävä käyttämään WebSocket-yhteyttä. Tämä tehdään @trpc/client/links/wsLink-paketin wsLink-toiminnolla.

wsLink ilmoittaa tRPC-asiakkaalle, mihin reaaliaikaisen datan yhteys muodostetaan. Tämä on erillinen HTTP-päätepisteestä.

Asentakaa: npm install @trpc/client @trpc/react-query @tanstack/react-query

import { createWSClient, wsLink, httpBatchLink, createTRPCReact } from '@trpc/react-query';
import type { AppRouter } from '../server/server'; // Adjust path to your server's AppRouter

// Create a tRPC React client instance
export const trpc = createTRPCReact<AppRouter>();

// Create a WebSocket client instance
const wsClient = createWSClient({
  url: `ws://localhost:3001`,
});

export const trpcClient = trpc.createClient({
  links: [
    // Use the WebSocket link for subscriptions
    wsLink({
      client: wsClient,
    }),
    // Optionally, use HTTP for queries/mutations
    httpBatchLink({
      url: `http://localhost:3000/api/trpc`,
    }),
  ],
});

Tilausten käyttäminen käyttöliittymässä

Kun asiakas on määritetty, voitte kuunnella reaaliaikaisia päivityksiä tRPC:n useSubscription-hookin avulla (jos käytätte React Querya).

Se toimii kyselyiden ja mutaatioiden tapaan, mutta jatkuville tietovirroille ja tarjoaa callback-funktiot uutta dataa ja virheitä varten.

import React from 'react';
import { trpc } from './trpcClient'; // Assuming trpcClient.ts from previous scene

function MyComponent() {
  const [message, setMessage] = React.useState('Waiting for greeting...');

  // Subscribe to the 'onHello' procedure
  trpc.onHello.useSubscription(undefined, {
    onData(data) {
      // This callback fires whenever the server sends new data
      setMessage(data);
      console.log('Received subscription data:', data);
    },
    onError(err) {
      console.error('Subscription error:', err);
      setMessage(`Error: ${err.message}`);
    },
  });

  return (
    <div>
      <h1>Live Greeting:</h1>
      <p>{message}</p>
    </div>
  );
}

export default MyComponent;

Pikatarkistus: WS-integraatio

Olette oppineet määrittämään WebSocket-palvelimen ja integroimaan sen tRPC:n kanssa reaaliaikaisia tilauksia varten. Mitkä seuraavista ovat tämän integroinnin olennaisia komponentteja tai vaiheita?

Kertaus: WebSockets-yhteyksien määrittäminen

Olette onnistuneesti määrittäneet perustan reaaliaikaiselle viestinnälle tRPC:n avulla!

  • Aloitimme ws-kirjastoa käyttävästä yksinkertaisesta WebSocket-palvelimesta.
  • Sen jälkeen integroimme tRPC-reitittimen palvelimeen käyttämällä pakettia @trpc/server/adapters/ws ja funktiota applyWSSHandler.
  • Lisäsimme reitittimeen yksinkertaisen tilausproseduurin käyttäen observable-mallia.
  • Lopuksi määritimme asiakkaan wsLink-linkillä ja tutustuimme tilausten käyttämiseen useSubscription-hookin avulla.

Tämän vankan määrityksen ansiosta tRPC-taustapalvelu voi välittää reaaliaikaisia päivityksiä suoraan käyttöliittymäasiakkaille ja hyödyntää tyyppiturvallisuutta päästä päähän.

Aloita maksutta

Opi tRPC:n tyyppiturvalliset API:t päästä päähän tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
10
Oppitunnit
40

Usein kysytyt kysymykset

Onko oppitunti ”WebSocketien määrittäminen tilauksia varten” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa tRPC:n tyyppiturvalliset API:t päästä päähän-oppimispolun 3 oppituntia, myös oppitunnin “WebSocketien määrittäminen tilauksia varten”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. tRPC:n tyyppiturvalliset API:t päästä päähän-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”WebSocketien määrittäminen tilauksia varten”?

Määrittäkää WebSocket-palvelin ja integroikaa se tRPC-taustajärjestelmäänne reaaliaikaisen viestinnän mahdollistamiseksi. Harjoittelet tRPC:n tyyppiturvalliset API:t päästä päähän-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni tRPC:n tyyppiturvalliset API:t päästä päähän-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin tRPC:n tyyppiturvalliset API:t päästä päähän-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/4.

Kuinka kauan ”WebSocketien määrittäminen tilauksia varten”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä tRPC:n tyyppiturvalliset API:t päästä päähän-oppitunnilla?

Kyllä. Jokainen tRPC:n tyyppiturvalliset API:t päästä päähän-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Reaaliaikaisuuden esittely tRPC:llä
  2. WebSocketien määrittäminen tilauksia varten
  3. Reaaliaikaisten datatilausten toteuttaminen
  4. Yhteyden muodostaminen uudelleen ja tilauksen siivous
← Takaisin: tRPC:n tyyppiturvalliset API:t päästä päähän