Skip to content

nfwsncked/go-sse

 
 

Repository files navigation

go-sse

Go Report Card Build Status GoDoc

Server-Sent Events for Go

Fork reasoning

Some event driven patterns require direct access to the client upon connect/disconnect. Original repo doesn't provide any potential access to these and seems to be not that much maintained. I didn't find any reasonably good implementations across other forks, so why not contributing myself or with your help :)

About

Server-sent events is a method of continuously sending data from a server to the browser, rather than repeatedly requesting it, replacing the "long polling way".

It's supported by all major browsers and for IE/Edge you can use a polyfill.

go-sse is a small library to create a Server-Sent Events server in Go and works with Go 1.9+.

Features

  • Multiple channels (isolated)
  • Broadcast message to all channels
  • Custom headers (useful for CORS)
  • Last-Event-ID support (resend lost messages)
  • Follow SSE specification
  • Compatible with multiple Go frameworks

Instalation

go get github.com/nfwsncked/go-sse

Example

Server side:

package main

import (
    "log"
    "net/http"
    "strconv"
    "time"

    "github.com/nfwsncked/go-sse"
)

func main() {
    // Create SSE server
    s := sse.NewServer(nil)
    defer s.Shutdown()

    // Configure the route
    http.Handle("/events/", s)

    // Send messages every 5 seconds
    go func() {
        for {
            s.SendMessage("/events/my-channel", sse.SimpleMessage(time.Now().Format("2006/02/01/ 15:04:05")))
            time.Sleep(5 * time.Second)
        }
    }()

    log.Println("Listening at :3000")
    http.ListenAndServe(":3000", nil)
}

Client side (JavaScript):

e = new EventSource('/events/my-channel');
e.onmessage = function(event) {
    console.log(event.data);
};

More examples available here.

License

MIT

About

Server-Sent Events for Go

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Go 97.3%
  • HTML 2.7%