WebSocketien määrittäminen tilauksia varten
Määrittäkää WebSocket-palvelin ja integroikaa se tRPC-taustajärjestelmäänne reaaliaikaisen viestinnän mahdollistamiseksi.
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:nappRouter.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/wsja funktiotaapplyWSSHandler. - Lisäsimme reitittimeen yksinkertaisen tilausproseduurin käyttäen
observable-mallia. - Lopuksi määritimme asiakkaan
wsLink-linkillä ja tutustuimme tilausten käyttämiseenuseSubscription-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.
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
- Reaaliaikaisuuden esittely tRPC:llä
- WebSocketien määrittäminen tilauksia varten
- Reaaliaikaisten datatilausten toteuttaminen
- Yhteyden muodostaminen uudelleen ja tilauksen siivous