Menyediakan WebSockets untuk Langganan
Konfigurasikan pelayan WebSocket dan sepadukannya dengan bahagian belakang tRPC anda untuk membolehkan komunikasi masa nyata.
Menyediakan WebSockets untuk Langganan ialah pelajaran API tRPC Selamat Jenis dari Hujung ke Hujung percuma di CoddyKit. Ini ialah pelajaran 2 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran API tRPC Selamat Jenis dari Hujung ke Hujung, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus API tRPC Selamat Jenis dari Hujung ke Hujung merangkumi sejumlah 4 pelajaran.
Masa Nyata dengan WebSockets
Semasa membina aplikasi web moden, kemas kini masa nyata sering menjadi keperluan. Fikirkan tentang sembang langsung, paparan harga saham atau sistem pemberitahuan.
Permintaan HTTP tradisional tidak menyimpan keadaan dan berjangka hayat pendek. WebSockets menyediakan saluran komunikasi berterusan dua hala antara klien dengan pelayan.
- Berterusan: Sambungan kekal terbuka, tidak seperti HTTP.
- Dua hala: Klien dan pelayan boleh menghantar mesej pada bila-bila masa.
- Efisien: Overhednya lebih rendah berbanding tinjauan berterusan melalui HTTP.
Persediaan Asas Pelayan WebSocket
Sebelum mengintegrasikan tRPC, mari kita fahami cara pelayan WebSocket kendiri berfungsi. Kita akan menggunakan pustaka ws yang popular untuk Node.js.
Pertama, pasang pakej yang diperlukan: npm install ws typescript ts-node
Pelayan asas ini mendengar sambungan dan merekodkan apabila klien bersambung atau menghantar mesej.
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');Penyesuai WebSocket tRPC
tRPC memerlukan cara untuk berkomunikasi melalui protokol WebSocket. Di sinilah @trpc/server/adapters/ws digunakan.
Penyesuai ini membolehkan prosedur tRPC anda didedahkan dan dikendalikan oleh pelayan WebSocket sedia ada (seperti pelayan ws yang baru kita lihat).
Pasangnya: npm install @trpc/server @trpc/server/adapters/ws
Menyediakan Penghala tRPC Anda
Untuk membolehkan tRPC mengendalikan langganan melalui WebSockets, anda memerlukan penghala tRPC dan kilang konteks. Ini serupa dengan penyediaan API HTTP, tetapi untuk komunikasi masa nyata.
Mari kita takrifkan persediaan tRPC yang minimum. Kita akan menambahkan prosedur langganan ringkas selepas ini.
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 = () => ({});Mengintegrasikan tRPC dengan Pelayan WS
Sekarang, mari kita gabungkan pelayan ws dengan penghala tRPC menggunakan fungsi applyWSSHandler daripada penyesuai tersebut.
Fungsi ini menghubungkan prosedur tRPC anda dengan sambungan WebSocket, lalu menjadikannya tersedia untuk interaksi masa nyata.
wss: Instans pelayan WebSocket anda.router:appRoutertRPC anda.createContext: Fungsi untuk mencipta konteks tRPC bagi setiap permintaan.
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();
});Mencipta Langganan Ringkas
Langganan tRPC menggunakan corak observable. Observable ialah aliran data yang boleh dilanggan oleh klien untuk menerima kemas kini dari semasa ke semasa.
Di sini, kita mencipta langganan onHello asas yang menghantar sapaan dengan segera dan kemudian melakukan pembersihan.
// 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');
};
});
}),
});Kod Pelayan WebSocket tRPC Lengkap
Berikut ialah persediaan lengkap pada sisi pelayan. Anda boleh menyimpannya sebagai server.ts dan menjalankannya dengan ts-node server.ts.
Ia menggabungkan penghala tRPC dengan langganan, pelayan ws dan integrasi melalui applyWSSHandler.
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();
});Pautan WebSocket pada Sisi Klien
Di sisi klien, anda perlu mengkonfigurasi klien tRPC anda untuk menggunakan sambungan WebSocket. Langkah ini dilakukan dengan wsLink daripada @trpc/client/links/wsLink.
wsLink memberitahu klien tRPC anda tempat untuk bersambung bagi mendapatkan data masa nyata, berbeza daripada titik akhir HTTP anda.
Pasang: 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`,
}),
],
});Menggunakan Langganan di Bahagian Hadapan
Dengan klien yang telah dikonfigurasi, anda kini boleh menggunakan cangkuk useSubscription tRPC (jika menggunakan React Query) untuk mendengar kemas kini masa nyata.
Ia berfungsi sama seperti pertanyaan dan mutasi, tetapi untuk aliran data berterusan, dengan menyediakan panggilan balik bagi data baharu dan ralat.
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;Semakan Pantas: Integrasi WS
Anda telah mempelajari cara menyediakan pelayan WebSocket dan mengintegrasikannya dengan tRPC untuk langganan masa nyata. Antara berikut, yang manakah komponen atau langkah penting untuk integrasi ini?
Imbas Kembali: Menyediakan WebSockets
Anda telah berjaya menyediakan asas komunikasi masa nyata dengan tRPC!
- Kita bermula dengan pelayan WebSocket asas menggunakan pustaka
ws. - Kemudian, kita mengintegrasikan penghala tRPC dengan pelayan ini menggunakan
@trpc/server/adapters/wsdanapplyWSSHandler. - Kita menambahkan prosedur langganan ringkas kepada penghala menggunakan corak
observable. - Akhir sekali, kita mengkonfigurasi klien dengan
wsLinkdan melihat cara menggunakan langganan denganuseSubscription.
Persediaan kukuh ini membolehkan bahagian belakang tRPC anda menghantar kemas kini masa nyata terus kepada klien bahagian hadapan anda, dengan memanfaatkan keselamatan jenis hujung ke hujung.
Pelajari API tRPC Selamat Jenis dari Hujung ke Hujung dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 10
- Pelajaran
- 40
Soalan Lazim
Adakah pelajaran “Menyediakan WebSockets untuk Langganan” percuma?
Ya — sebanyak 3 pelajaran dalam laluan pembelajaran API tRPC Selamat Jenis dari Hujung ke Hujung, termasuk “Menyediakan WebSockets untuk Langganan”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus API tRPC Selamat Jenis dari Hujung ke Hujung merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Menyediakan WebSockets untuk Langganan”?
Konfigurasikan pelayan WebSocket dan sepadukannya dengan bahagian belakang tRPC anda untuk membolehkan komunikasi masa nyata. Anda berlatih API tRPC Selamat Jenis dari Hujung ke Hujung menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan API tRPC Selamat Jenis dari Hujung ke Hujung?
Tiada pengalaman terdahulu diperlukan. Pembelajaran API tRPC Selamat Jenis dari Hujung ke Hujung di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 2 daripada 4.
Berapa lamakah pelajaran “Menyediakan WebSockets untuk Langganan” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran API tRPC Selamat Jenis dari Hujung ke Hujung ini?
Ya. Setiap pelajaran API tRPC Selamat Jenis dari Hujung ke Hujung menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Pengenalan Masa Nyata dengan tRPC
- Menyediakan WebSockets untuk Langganan
- Melaksanakan Langganan Data Langsung
- Mengendalikan Sambungan Semula dan Pembersihan Langganan