Skip to content

aliakseiz/go-sse

 
 

Repository files navigation

go-sse

Go Report Card Build Status GoDoc

Server-Sent Events for Go

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

Fork from alexandrevicenzi/go-sse.

Features

  • Multiple isolated channels
  • Message broadcasting to all channels
  • Message sending to specific clients in a channel
  • Customizable HTTP headers (useful for CORS)
  • External client Authorization support
  • Client disconnection monitoring
  • Last-Event-ID support (resend lost messages)
  • Follow SSE specification
  • Compatible with multiple Go frameworks

Installation

go get github.com/aliakseiz/go-sse

Example

Server side:

package main

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

    "github.com/aliakseiz/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

Packages

No packages published

Languages

  • Go 97.5%
  • HTML 2.5%