Pola Long Polling dan Logika Penyambungan Kembali
Terapkan long polling dengan jeda bertahap eksponensial dan penyambungan kembali otomatis menggunakan useEffect dan AbortController.
Pola Long Polling dan Logika Penyambungan Kembali adalah pelajaran React Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar React Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus React Academy mencakup 4 pelajaran total.
Alur Poling Panjang
Poling panjang berlangsung dalam satu siklus: klien mengirim permintaan HTTP, peladen mempertahankan koneksi tetap terbuka sampai data baru tersedia (atau batas waktu tercapai, biasanya 30–60 detik), peladen merespons dengan data, dan klien segera mengirim permintaan lain. Ini menghasilkan koneksi yang hampir berkelanjutan dengan karakteristik dorongan dari peladen.
Menerapkan Poling Panjang dalam useEffect
Poling panjang di React menggunakan fungsi asinkron rekursif di dalam useEffect. Fungsi tersebut membuat permintaan pengambilan data, memproses respons, lalu memanggil dirinya lagi. Sinyal AbortController menghentikan rekursi saat komponen dilepas. Fungsi tersebut mengulang selama komponen terpasang dan tidak ada sinyal pembatalan.
AbortController untuk Pembersihan
Buat AbortController di bagian atas useEffect: teruskan controller.signal ke setiap panggilan pengambilan data. Dalam fungsi pembersihan, panggil controller.abort(). Ini membatalkan permintaan apa pun yang sedang berlangsung ketika komponen dilepas, sehingga mencegah pembaruan keadaan pada komponen yang sudah dilepas dan kebocoran sumber daya jaringan.
Mundur Eksponensial saat Terjadi Kesalahan
Ketika permintaan poling panjang gagal, jangan langsung mencoba lagi—tunggu sebelum percobaan berikutnya. Mundur eksponensial menggandakan jeda pada setiap kegagalan berturut-turut: 1 detik, 2 detik, 4 detik, 8 detik, 16 detik, dengan batas 30 detik. Ini mencegah peladen yang gagal dihantam terus-menerus dan memberinya waktu untuk mengatasi masalah sementara. Atur ulang jeda menjadi 1 detik setelah respons berhasil.
Menambahkan Pengacakan pada Mundur Eksponensial
Dengan banyak klien melakukan poling ke peladen yang sama, mundur eksponensial tanpa pengacakan menyebabkan "kerumunan menggelegar": semua klien menunda selama durasi yang sama dan mencoba lagi secara bersamaan, sehingga kembali membebani peladen. Tambahkan pengacakan dengan mengacak jeda: delay + Math.random() * delay. Ini menyebarkan percobaan ulang dalam rentang waktu tertentu dan mengurangi lonjakan beban peladen.
Keadaan Koneksi
Pertahankan keadaan koneksi untuk mencerminkan siklus hidup poling: isConnecting (koneksi awal atau menyambung kembali setelah kesalahan), isConnected (poling terakhir berhasil), isError (kegagalan berturut-turut, jumlah percobaan ulang maksimum tercapai). Tampilkan status ini di antarmuka pengguna agar pengguna memahami keandalan data waktu nyata.
Menampilkan Pengatur Waktu Poling Berikutnya
Selama jeda mundur sebelum percobaan ulang berikutnya, Anda dapat menampilkan hitung mundur: "Menyambung kembali dalam 8 detik..." dengan indikator kemajuan. Hitung stempel waktu percobaan ulang saat mengatur pengatur waktu mundur dan perbarui tampilan setiap detik. Transparansi ini meyakinkan pengguna bahwa aplikasi sedang berusaha memulihkan koneksi.
setTimeout Rekursif vs setInterval
Gunakan setTimeout rekursif (panggil poling berikutnya di dalam pengendali respons), bukan setInterval untuk poling. setInterval berjalan pada interval tetap terlepas dari durasi permintaan sebelumnya—permintaan yang berlangsung lama dapat menyebabkan poling tumpang tindih. setTimeout rekursif hanya memulai poling berikutnya setelah poling sebelumnya selesai.
Konfigurasi Interval Poling
Jadikan interval poling sebagai opsi konfigurasi di kait Anda: useLongPoll({ url, interval: 5000 }). Sumber data yang berbeda memerlukan tingkat kesegaran yang berbeda: indikator "siapa yang sedang aktif" mungkin melakukan poling setiap 30 detik, sedangkan status tugas mungkin melakukan poling setiap 5 detik. Hindari menetapkan interval secara permanen dalam kode implementasi.
Beralih dari Poling ke SSE
Seiring API Anda semakin matang, Anda mungkin mengganti poling dengan SSE demi efisiensi yang lebih baik. Komponen React yang menggunakan kait poling sebaiknya diabstraksikan dari lapisan transportasi. Jika kait Anda mengekspos antarmuka yang sama (onData, status, kesalahan), mengganti poling dengan EventSource di baliknya tidak memerlukan perubahan pada komponen yang menggunakan kait tersebut.
Penanganan Batas Waktu di Sisi Peladen
Ketika peladen menahan koneksi poling panjang dan tidak ada data yang tiba, peladen harus mengirim respons batas waktu (200 dengan isi kosong, atau 204 Tanpa Konten) agar koneksi tidak menggantung tanpa batas. Klien kemudian segera melakukan poling lagi. Batas waktu di sisi peladen ini (30–60 detik) terpisah dari batas waktu pengambilan data di sisi klien (lebih lama, misalnya 90 detik).
Tujuan Mundur Eksponensial
Mengapa poling panjang menggunakan mundur eksponensial saat mencoba lagi setelah kesalahan koneksi?
Ringkasan Pelajaran: Poling Panjang
Poling panjang: klien mengirim permintaan, peladen menahan koneksi sampai data tersedia atau batas waktu tercapai, lalu klien segera mengirim permintaan lagi setelah respons. Terapkan dengan pengambilan data asinkron rekursif di useEffect dan AbortController untuk pembersihan. Saat terjadi kesalahan: mundur eksponensial (1 detik, 2 detik, 4 detik... dibatasi 30 detik) ditambah pengacakan untuk mencegah kerumunan menggelegar. Gunakan setTimeout rekursif, bukan setInterval, untuk mencegah poling tumpang tindih. Lacak keadaan isConnecting/isConnected/isError untuk umpan balik antarmuka pengguna.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Pola Long Polling dan Logika Penyambungan Kembali” gratis?
Ya — teks lengkap “Pola Long Polling dan Logika Penyambungan Kembali” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus React Academy, upgrade ke CoddyKit PRO. Kursus React Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Pola Long Polling dan Logika Penyambungan Kembali”?
Terapkan long polling dengan jeda bertahap eksponensial dan penyambungan kembali otomatis menggunakan useEffect dan AbortController. Kamu berlatih React Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai React Academy?
Tidak diperlukan pengalaman sebelumnya. React Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.
Berapa lama pelajaran “Pola Long Polling dan Logika Penyambungan Kembali” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran React Academy ini?
Ya. Setiap pelajaran React Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Perbandingan SSE vs WebSockets vs Polling
- Menggunakan Stream SSE di React dengan EventSource
- Pola Long Polling dan Logika Penyambungan Kembali
- Membangun Umpan Notifikasi Waktu Nyata