DEV Community

Benita Clarissa
Benita Clarissa

Posted on • Edited on

2

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 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.

Heroku

Build apps, not infrastructure.

Dealing with servers, hardware, and infrastructure can take up your valuable time. Discover the benefits of Heroku, the PaaS of choice for developers since 2007.

Visit Site

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay