DEV Community

Benita Clarissa
Benita Clarissa

Posted on

Implementasi SSE pada Golang (Backend)

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)
}
Enter fullscreen mode Exit fullscreen mode

Setelah itu, kita jalankan function Main.

go run main.go
Enter fullscreen mode Exit fullscreen mode

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'.
Enter fullscreen mode Exit fullscreen mode

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 dari sisi frontend yang akan berfungsi sebagai client dari SSE ini.

Selanjutnya

Pada post selanjutnya, kita akan melihat bagaimana data yang di-push server diterima dan ditampilkan oleh client (frontend) menggunakan ReactJS.

Referensi

Cook, D. (2014). Data Push Apps with HTML5 SSE: Pragmatic Solutions for Real-World Clients (1st ed.) [E-book]. O’Reilly Media.

Discussion (0)