05 — Catatan teknik
Sinkronisasi jawaban offline untuk aplikasi ujian
Catatan kerja tentang menyimpan jawaban di IndexedDB tanpa membiarkan klien menjadi otoritas.
/ Ini draf yang sedang dikerjakan. Strukturnya sudah ada; detailnya masih diverifikasi dan dilengkapi.
Batasannya
Jaringan di ruang ujian tidak andal. Peserta yang sedang di tengah sesi listening tidak bisa diminta menyambung ulang sebelum soal berikutnya, dan jawaban tidak boleh hilang karena request timeout.
Solusi yang menggoda adalah membiarkan klien memiliki state ujian dan menyinkronkan semuanya di akhir. Itu gagal begitu server perlu memutuskan apakah sesi masih terbuka.
Modelnya
Tiga lapisan, dengan pemilik yang jelas untuk masing-masing:
| Lapisan | Memegang | Tidak memegang |
|---|---|---|
| IndexedDB (Dexie) | Draf jawaban, antrean lokal | Status pengumpulan final |
| Aplikasi klien | Rendering, navigasi | Penilaian, otoritas waktu |
| Server | Waktu, pengumpulan, penilaian | Ketersediaan offline |
Jalur tulisnya:
- Jawaban langsung ditulis ke IndexedDB.
- Job sinkronisasi mengirimnya dengan identitas yang dibuat klien.
- Server melakukan upsert berdasarkan identitas itu, jadi percobaan ulang aman.
- Entri lokal ditandai sudah diakui.
- Saat reload, entri yang belum diakui dikirim ulang.
Kenapa idempotensi adalah intinya
Jaringan gagal di jendela ambigu: request mungkin sudah sampai dan response hilang. Tanpa idempotency key, percobaan ulang membuat jawaban ganda dan skor peserta salah.
Dengan key itu, server bisa memproses tulisan yang sama dua kali dan berakhir di state yang sama. Properti itu lebih penting daripada interval sinkronisasi apa pun.
Pertanyaan terbuka untuk diverifikasi
- Bagaimana timer klien dan timer server diselaraskan di batas sesi.
- Apakah jawaban terlambat yang datang setelah pengumpulan ditolak atau dicatat untuk ditinjau.
- Seberapa banyak antrean yang harus bertahan saat browser restart versus refresh tab.
- Apa yang dilihat operator saat peserta masih punya jawaban belum tersinkron di akhir sesi.
Yang ingin saya tulis berikutnya
Contoh lengkap endpoint upsert dan definisi tabel Dexie, plus tabel kegagalan: koneksi putus, tab ditutup, server restart, dan clock skew.