Melaksanakan Langganan Data Langsung
Cipta prosedur langganan tRPC untuk menolak kemas kini masa nyata daripada pelayan kepada pelanggan yang bersambung.
Melaksanakan Langganan Data Langsung ialah pelajaran API tRPC Selamat Jenis dari Hujung ke Hujung percuma di CoddyKit. Ini ialah pelajaran 3 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.
Data Masa Nyata dengan Langganan
Selamat datang ke pelajaran terakhir tentang masa nyata tRPC! Kita telah mempelajari tentang WebSockets, dan kini mari kita bina ciri data langsung.
Langganan dalam tRPC membolehkan pelayan anda menghantar kemas kini masa nyata kepada klien yang bersambung. Tidak seperti pertanyaan (yang menarik data) atau mutasi (yang mengubah data), langganan berasaskan penghantaran.
- Pertanyaan: Klien bertanya, pelayan menjawab sekali.
- Mutasi: Klien menghantar data, pelayan melaksanakan tindakan dan menjawab sekali.
- Langganan: Klien bertanya sekali, pelayan menghantar kemas kini dari semasa ke semasa.
Mentakrifkan Langganan Pelayan
Untuk mencipta langganan pada pelayan tRPC anda, gunakan pembantu createSubscription, sama seperti createQuery atau createMutation.
Perbezaan utama ialah prosedur langganan mengembalikan observable. Observable ialah aliran data yang boleh memancarkan berbilang nilai dari semasa ke semasa.
Mari kita lihat struktur asasnya.
Corak Observable
Semasa mentakrifkan langganan, anda akan menggunakan corak observable. Corak ini melibatkan fungsi yang menerima fungsi emit dan mengembalikan fungsi pembersihan.
- Fungsi
emitialah fungsi yang anda panggil untuk menghantar data kepada klien. - Fungsi pembersihan (yang dikembalikan oleh logik langganan anda) berjalan apabila klien berhenti melanggan.
Dengan ini, anda boleh mengurus sumber seperti pendengar acara atau selang masa.
Kod Pelayan: Pembilang Langsung Asas
Berikut ialah langganan pada sisi pelayan tRPC ringkas yang memancarkan nombor setiap saat. Nombor ini boleh mewakili apa-apa sahaja, seperti bilangan pengguna langsung.
import { router, publicProcedure } from './trpc';
import { observable } from '@trpc/server/observable';
export const appRouter = router({
onUpdate: publicProcedure.subscription(() => {
// This is where we create the observable
return observable<number>((emit) => {
let count = 0;
const interval = setInterval(() => {
count++;
emit.next(count); // Push new data to clients
}, 1000);
// Return a cleanup function
return () => {
clearInterval(interval);
};
});
}),
});
// This code is illustrative and not directly runnable
// without a full Node.js server setup.
// For context, 'router' and 'publicProcedure' would be
// initialized from '@trpc/server'.
Memahami Aliran Pelayan
Dalam contoh sebelumnya:
publicProcedure.subscription(() => {...})mentakrifkan titik akhir langganan.observablemencipta strim data yang akan menghantar jenis((emit) => {...}) number.emit.next(count)dipanggil berulang kali di dalamsetIntervaluntuk menolakcountsemasa kepada semua klien yang melanggan.- Fungsi yang dikembalikan
() => { clearInterval(interval); }memastikan selang masa dihentikan apabila klien terputus sambungan atau berhenti melanggan, sekali gus mencegah kebocoran memori.
Menggunakan Langganan pada Klien
Pada bahagian klien, tRPC menyediakan cangkuk yang mudah untuk menggunakan langganan, biasanya trpc.useSubscription jika anda menggunakan React Query.
Cangkuk ini berfungsi sama seperti useQuery, tetapi mengekalkan sambungan terbuka dan mengemas kini komponen anda setiap kali data baharu tiba daripada pelayan.
Kod Klien: Contoh Komponen React
Berikut ialah komponen React yang melanggan prosedur onUpdate kami dan memaparkan pembilang langsung. Perhatikan bahawa data dikemas kini secara automatik.
import React from 'react';
// Mock tRPC client for runnable example
const mockTRPCClient = {
onUpdate: {
subscribe: (opts) => {
let count = 0;
const interval = setInterval(() => {
count++;
opts.onData(count); // Simulate server pushing data
}, 1000);
return { // Return unsubscribe function
unsubscribe: () => clearInterval(interval),
};
},
},
};
// Mock useSubscription hook
const useSubscription = (path, input, { onData, onError }) => {
React.useEffect(() => {
const subscription = mockTRPCClient[path].subscribe({
onData,
onError,
});
return () => subscription.unsubscribe();
}, [path, input, onData, onError]);
};
function LiveCounter() {
const [currentCount, setCurrentCount] = React.useState(0);
useSubscription(
'onUpdate', // Path to your tRPC subscription
undefined, // No input for this subscription
{
onData(data) {
setCurrentCount(data); // Update state with new data
},
onError(err) {
console.error('Subscription error:', err);
},
}
);
return (
<div>
<h3>Live Counter:</h3>
<p>Current value: <b>{currentCount}</b></p>
</div>
);
}
// This would be rendered by a framework like React.
// For runnable purposes, we can simulate a main entry point.
export default function Main() {
return <LiveCounter />;
}
Langganan dengan Input
Sama seperti pertanyaan dan mutasi, langganan boleh menerima input. Ini amat berguna untuk menapis atau menyesuaikan strim data bagi setiap klien.
Contohnya, anda mungkin melanggan kemas kini untuk productId tertentu atau bilik sembang tertentu, iaitu roomName.
Anda akan mentakrifkan skema input menggunakan Zod pada pelayan dan menghantar objek input pada klien.
Kod: Langganan dengan Input
Berikut ialah cara mentakrifkan langganan yang menerima rentetan topic sebagai input pada pelayan, serta cara klien menggunakannya.
/* --- SERVER-SIDE (Illustrative) --- */
import { z } from 'zod';
import { router, publicProcedure } from './trpc';
import { observable } from '@trpc/server/observable';
export const appRouterWithInput = router({
onTopicUpdate: publicProcedure
.input(z.object({ topic: z.string() })) // Define input schema
.subscription(({ input }) => {
return observable<string>((emit) => {
// Simulate updates for a specific topic
const interval = setInterval(() => {
emit.next(`Update for '${input.topic}': ${Date.now()}`);
}, 2000);
return () => clearInterval(interval);
});
}),
});
/* --- CLIENT-SIDE (React Component) --- */
import React from 'react';
// Mock tRPC client for runnable example
const mockTRPCClientWithInput = {
onTopicUpdate: {
subscribe: (input, opts) => {
const interval = setInterval(() => {
opts.onData(`Update for '${input.topic}': ${Date.now()}`);
}, 2000);
return {
unsubscribe: () => clearInterval(interval),
};
},
},
};
// Mock useSubscription hook for runnable example
const useSubscriptionWithInput = (path, input, { onData, onError }) => {
React.useEffect(() => {
const subscription = mockTRPCClientWithInput[path].subscribe(
input,
{ onData, onError }
);
return () => subscription.unsubscribe();
}, [path, input, onData, onError]);
};
function TopicUpdates({ topic }) {
const [latestUpdate, setLatestUpdate] = React.useState('');
useSubscriptionWithInput(
'onTopicUpdate',
{ topic }, // Pass the input object
{
onData(data) {
setLatestUpdate(data);
},
onError(err) {
console.error('Subscription error:', err);
},
}
);
return (
<div>
<h4>Topic: {topic}</h4>
<p>{latestUpdate}</p>
</div>
);
}
export default function Main() {
return (
<div>
<TopicUpdates topic="news" />
<TopicUpdates topic="sports" />
</div>
);
}
Amalan Terbaik untuk Langganan
Apabila menggunakan langganan tRPC, pertimbangkan amalan terbaik berikut:
- Pembersihan: Sentiasa kembalikan fungsi pembersihan daripada observable anda untuk membebaskan sumber (contohnya, menghentikan selang masa dan menutup sambungan pangkalan data).
- Pengendalian Ralat: Laksanakan panggilan balik
onErrorpada klien untuk mengendalikan ralat langganan dengan baik. - Penghad Kadar: Beri perhatian kepada kekerapan anda memancarkan data supaya klien atau pelayan anda tidak dibebankan.
- Bila Hendak Menggunakannya: Langganan sangat sesuai untuk data yang benar-benar masa nyata. Untuk kemas kini yang kurang kritikal, pertanyaan tradisional dengan pengundian atau pencachean pada klien mungkin sudah memadai.
- Pengesahan/Kebenaran: Gunakan perantara tRPC untuk melindungi prosedur langganan dan memastikan hanya pengguna yang diberi kebenaran menerima kemas kini.
Semakan Pantas: Asas Langganan
Anda telah mentakrifkan langganan tRPC yang memancarkan rentetan setiap 5 saat. Bahagian manakah daripada cangkuk useSubscription pada klien yang akan anda gunakan untuk memproses setiap rentetan yang masuk?
Imbas Kembali: Langganan Data Langsung
Dalam pelajaran ini, anda telah belajar melaksanakan langganan data langsung dengan tRPC:
- Pada pelayan: Takrifkan prosedur langganan menggunakan
publicProcedure.subscriptiondan kembalikanobservable. - Logik Observable: Gunakan fungsi
emit.next()untuk menolak data dan kembalikan fungsi pembersihan. - Pada klien: Gunakan langganan melalui
trpc.useSubscriptiondan sediakan panggilan balikonDatauntuk mengendalikan kemas kini masa nyata yang masuk. - Input: Hantar argumen kepada langganan untuk mendapatkan strim data yang ditapis atau disesuaikan.
Tahniah! Kini anda boleh membina ciri masa nyata yang berkuasa dengan keselamatan jenis hujung ke hujung tRPC.
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 “Melaksanakan Langganan Data Langsung” percuma?
Ya — sebanyak 3 pelajaran dalam laluan pembelajaran API tRPC Selamat Jenis dari Hujung ke Hujung, termasuk “Melaksanakan Langganan Data Langsung”, 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 “Melaksanakan Langganan Data Langsung”?
Cipta prosedur langganan tRPC untuk menolak kemas kini masa nyata daripada pelayan kepada pelanggan yang bersambung. 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 3 daripada 4.
Berapa lamakah pelajaran “Melaksanakan Langganan Data Langsung” 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