๐ฅ SSE untuk Realtime Data & Notification: Solusi Ringan Tanpa Kerumitan WebSocket

I am an enthusiastic researcher and developer with a passion for using technology to innovate in business and education.
Di era aplikasi modern, pengguna menuntut data selalu up-to-date tanpa perlu refresh:
status pesanan berubah otomatis, dashboard server update realtime, pesan dan notifikasi masuk seketika.
Saat berbicara tentang realtime, yang terlintas biasanya WebSocket.
Padahal ada teknologi yang lebih ringan, lebih mudah, dan lebih hemat resource untuk kebanyakan kasus:
SSE โ Server-Sent Events
๐ Apa itu SSE?
SSE (Server-Sent Events) adalah mekanisme push dari server ke client menggunakan koneksi HTTP standar.
Client berlangganan ke endpoint SSE
Server mengirim data setiap ada event baru
Browser otomatis reconnect saat koneksi terputus
Tidak perlu protokol baru atau setup rumit seperti pada WebSocket.
๐ Aliran Komunikasi SSE
Client โ buka koneksi SSE โ Server
Server โ kirim event realtime โ Client
Server โ kirim lagi saat ada update โ Client
โก Satu arah: Server โ Client
โก Simpel, efisien, built-in di browser
๐ฏ Kapan SSE adalah pilihan terbaik?
| Kebutuhan | SSE | WebSocket |
| Update realtime dari server ke browser | โ๏ธ | โ๏ธ |
| Notifikasi user | โ๏ธ | โ๏ธ |
| Streaming logs / metrics | โ๏ธ | โ๏ธ |
| Chat dua arah | โ | โ๏ธ |
| Game multi-player low-latency | โ | โ๏ธ |
| Butuh dukungan HTTP/2 | โ๏ธ | โ ๏ธ kompleks |
| Server lebih hemat resource | โ๏ธ | โ |
Jika hanya perlu informasi mengalir dari server ke client,
SSE adalah solusi ideal.
๐งฉ Contoh Penggunaan SSE
๐ Notifikasi user (transaksi selesai, chat baru, reply)
๐ Dashboard realtime (monitoring CPU, RAM, traffic)
๐ Status order (pesanan diproses โ dikirim โ diterima)
๐งช Progress task (upload render, video encoding)
๐ Streaming log (deployment / CI/CD)
Aplikasi terasa hidup, tanpa polling berat tiap 2โ3 detik.
โ๏ธ Cara Kerja di Browser
Browser sudah punya API bawaan:
const events = new EventSource("/api/events");
events.onmessage = (event) => {
console.log("Message: ", event.data);
};
events.onerror = () => {
console.log("SSE connection lost, retrying...");
};
Tanpa library tambahan
Auto reconnect bawaan
Dukungan luas (kecuali IE bawaan ๐ฅฒ)
๐ฅ๏ธ Contoh Endpoint SSE (Node.js/Hono)
import { Hono } from 'hono';
const app = new Hono();
app.get('/events', (c) => {
c.header('Content-Type', 'text/event-stream');
c.header('Cache-Control', 'no-cache');
c.header('Connection', 'keep-alive');
const send = (data: any) => {
c.res.write(`data: ${JSON.stringify(data)}\n\n`);
};
// Simulasi kirim event tiap 5 detik
const interval = setInterval(() => {
send({ time: new Date().toISOString() });
}, 5000);
return new Response('', {
headers: c.res.headers,
});
});
export default app;
Trik paling penting: format event harus valid SSE:
data: {...}\n\n
๐ SSE + Auth + Multi-User Scalability
SSE sangat cocok untuk SaaS:
Kirim event hanya untuk user tertentu
Integrasi dengan JWT / HttpOnly Cookie
Bisa dipadukan dengan Redis Pub/Sub untuk broadcast antar instance
Arsitektur umum:
Database (PostgreSQL)
โ
Backend API
โ โ
REST SSE
โ โ
React Query + SSE EventSource
๐ Keunggulan Utama SSE
| Fitur | SSE | WebSocket | Polling |
| Push dari server | โ๏ธ | โ๏ธ | โ |
| Auto reconnect bawaan | โ๏ธ | โ | โ |
| Hemat koneksi dan resource | โ๏ธ | โ | โ |
| Bisa lewat reverse proxy (Nginx/CDN) | โ๏ธ | โ ๏ธ | |
| Kompatibel HTTP/2 | โ๏ธ | โ ๏ธ | |
| Implementasi sederhana | โ๏ธ | โ |
โ ๏ธ Keterbatasan SSE
Satu arah (tidak kirim dari client ke server)
Tidak optimal untuk ribuan event per detik seperti game/action
Browser perlu fallback untuk environment spesifik (legacy)
Untuk 90% aplikasi dashboard dan notifikasi โ sudah lebih dari cukup.
๐ง Kesimpulan
SSE adalah solusi realtime modern yang:
โ
ringan
โ
mudah diimplementasikan
โ
biaya server kecil
โ
cocok untuk notifikasi dan update data dinamis
Tidak semua realtime membutuhkan WebSocket.
Pilih yang lebih sederhana tapi efektif: SSE.





