Pada kali ini, kita akan menggunakan package go-sse.
Untuk install package tersebut, silakan eksekusi instruksi berikut pada terminal/command prompt.
go get github.com/alexandrevicenzi/go-sse
.
Di bawah ini adalah contoh kode program implementasi SSE.
package main
import (
"encoding/json"
"net/http"
"strconv"
"time"
"github.com/alexandrevicenzi/go-sse"
)
func main() {
name := "Latest Event"
channel := "new-update-channel"
const jsonData = `
{
"stringField": "Value",
"intField": 123,
"floatField": 3.14159,
"booleanField": true
}
`
var sseData map[string]string
json.Unmarshal([]byte(jsonData), &sseData)
s := sse.NewServer(nil)
defer s.Shutdown()
// Konfigurasi route http
http.Handle("/", http.FileServer(http.Dir("./static"))) // dummy static html file yang akan menampilkan event source
http.Handle("/events/", s)
// Mengirimkan data setiap 3 detik sekali
go func() {
for {
id := strconv.FormatInt(time.Now().UTC().UnixNano(), 10)
sseData["timestamp"] = time.Now().Format("2006-01-02 15:04:05")
data, err := json.Marshal(sseData)
if err == nil {
s.SendMessage("/events/"+channel, sse.NewMessage(id, string(data), name))
}
time.Sleep(3 * time.Second)
}
}()
http.ListenAndServe(":8080", nil)
}
Setelah itu, kita jalankan function Main.
go run main.go
Lalu, amati hasilnya.
C:\Users\benita.clarissa\Documents\go\src\github.com\Bhinneka\coba-coba>go run main.go
go-sse: 2021/11/28 10:52:29 server started.
go-sse: 2021/11/28 10:52:31 channel '/events/new-update-channel' created.
go-sse: 2021/11/28 10:52:31 new client connected to channel '/events/new-update-channel'.
go-sse: 2021/11/28 10:52:32 message sent to channel '/events/new-update-channel'.
go-sse: 2021/11/28 10:52:35 message sent to channel '/events/new-update-channel'.
go-sse: 2021/11/28 10:52:38 message sent to channel '/events/new-update-channel'.
SSE dari sisi backend sudah kita siapkan. Namun, kita perlu melakukan development agar client dapat menerima data yang di-push tersebut. Oleh karena itu, kita perlu menulis script pada sisi frontend yang akan berfungsi sebagai client dari SSE ini. Script pada sisi frontend dapat menggunakan bahasa pemrograman dan framework yang dapat mengakses HTML Server-Sent Events API. Salah satu contohnya adalah React JS.
Referensi
Cook, D. (2014). Data Push Apps with HTML5 SSE: Pragmatic Solutions for Real-World Clients (1st ed.) [E-book]. O’Reilly Media.
Top comments (0)