Server-Sent Events for Go
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.
- 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
go get github.com/aliakseiz/go-sse
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.
MIT