Memahami SSE (Server-Sent Events) dan Manfaatnya
February 1, 2024
Pendahuluan
SSE (Server-Sent Events) adalah protokol komunikasi satu arah antara klien dan server yang berbasis pada protokol HTTP. Ini memungkinkan server untuk mendorong data ke klien secara real-time menggunakan aliran peristiwa tanpa memerlukan permintaan eksplisit dari klien. Dibangun di atas protokol HTTP standar, SSE memanfaatkan koneksi persisten satu arah, memungkinkan server untuk secara aktif mengirim peristiwa dan data ke klien.

Pada dasarnya, ini diimplementasikan menggunakan pendekatan streaming, di mana klien memulai permintaan koneksi ke server dan menjaga koneksi tetap terbuka. Server kemudian secara aktif mendorong pesan ke klien. Data yang dikirim dari server ke klien menggunakan Server-Sent Events (SSE) harus dikodekan dalam UTF-8, dan jenis konten yang dikembalikan adalah text/event-stream. Sebagai contoh, ketika menggunakan ChatGPT, ketika Anda mengajukan pertanyaan, Anda akan melihatnya menampilkan jawaban kata demi kata. Pada kenyataannya, ChatGPT secara proaktif 'mendorong' data yang telah dihitung sebelumnya kepada Anda, menggunakan teknologi SSE untuk mengembalikan data sambil menghitung, sehingga menghindari waktu tunggu antarmuka yang lama yang dapat menyebabkan penutupan halaman langsung.

Manfaat SSE
-
Komunikasi Real-Time: SSE menawarkan mekanisme komunikasi real-time, memungkinkan server untuk mendorong data ke klien secara aktif. Kemampuan real-time ini membuat SSE sangat cocok untuk aplikasi yang memerlukan pembaruan segera, seperti obrolan real-time, alat kolaborasi online, tampilan data real-time, dan pengiriman notifikasi.
-
Mengurangi Beban Jaringan: Dibandingkan dengan metode polling tradisional, SSE memanfaatkan koneksi yang bertahan lama. Melalui satu koneksi HTTP, server dapat mendorong beberapa peristiwa ke klien, menghindari permintaan HTTP yang sering dan mengurangi beban jaringan.
-
Ringan: SSE berbasis pada protokol HTTP, didukung oleh perangkat lunak server yang ada, dan lebih sederhana untuk digunakan dibandingkan dengan WebSocket.
-
Reconnection Otomatis: SSE dapat secara otomatis mencoba untuk menyambung kembali setelah koneksi terputus tanpa memerlukan kode tambahan. Mekanisme reconnection otomatis ini meningkatkan stabilitas sistem, memastikan komunikasi yang berkelanjutan bahkan dalam kondisi jaringan yang tidak stabil.
Proksi Layanan SSE Menggunakan API7 Enterprise
Dalam aplikasi praktis, memanfaatkan gateway API untuk memproksi layanan SSE berkontribusi pada peningkatan stabilitas layanan, menyelesaikan masalah keamanan dan lintas asal, dan cocok untuk menangani skenario aplikasi yang kompleks. NGINX, sebagai salah satu server proxy terbalik paling populer, memiliki pangsa pasar yang cukup besar.
Ketika memproksi layanan SSE pada NGINX, perlu untuk menonaktifkan proxy_buffering. Namun, konfigurasi ini harus ditutup setidaknya pada tingkat lokasi, yang berarti jika ada beberapa lokasi dalam sistem dan hanya beberapa yang perlu menonaktifkan caching untuk mendukung layanan SSE, hal ini dapat memengaruhi kinerja API non-SSE lainnya. Selain itu, konfigurasi proxy_buffering NGINX kurang fleksibel karena tidak dapat diaktifkan atau dinonaktifkan secara dinamis saat runtime, memerlukan reload konfigurasi untuk berlaku, yang dapat menyebabkan gangguan layanan.
API7 Enterprise menyediakan plugin proxy-buffering, memungkinkan Anda untuk lebih fleksibel memproksi layanan upstream SSE. Dengan mengaktifkan plugin ini di rute yang sesuai, Anda dapat dengan mudah mengontrol caching tanpa perlu memuat ulang seluruh konfigurasi. Fleksibilitas ini memenuhi persyaratan proksi layanan SSE sambil juga memenuhi kebutuhan kinerja dan konfigurasi dinamis.

Pengujian di bawah ini mengkonfirmasi keberhasilan proksi layanan SSE.
curl "http://127.0.0.1:9080/.sse" -H "Accept: text/event-stream" event: server data: 27d365b177ae id: 1 event: request data: GET /.sse HTTP/1.1 data: data: Host: 127.0.0.1:9080 data: Accept: text/event-stream data: User-Agent: curl/8.1.2 data: X-Forwarded-For: 192.168.65.1 data: X-Forwarded-Host: 127.0.0.1 data: X-Forwarded-Port: 9080 data: X-Forwarded-Proto: http data: X-Real-Ip: 192.168.65.1 data: id: 2 event: time data: 2024-01-29T04:04:20Z id: 3 event: time data: 2024-01-29T04:04:21Z id: 4 ...
Kesimpulan
Secara keseluruhan, SSE cocok untuk skenario yang memerlukan komunikasi dan pembaruan real-time, menyediakan cara yang sederhana dan efektif untuk mencapainya. Namun, penting untuk dicatat bahwa SSE adalah saluran satu arah, hanya memungkinkan server untuk mengirim pesan ke klien. Oleh karena itu, SSE mungkin tidak cocok untuk semua jenis kebutuhan komunikasi real-time. Untuk skenario komunikasi dua arah yang lebih kompleks, WebSocket atau teknologi lain mungkin lebih sesuai.