You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

801 B

learning_sse

Learning Server Side Events.

The magic is in setting the Content Type header to text/event-stream, writing the response in the from of data: %s \n\n, and flushing the content of the WriteResponse buffer manually. This is necessary because by default Go will implicitly flush the buffer only once the Handler has returned.

func SSEHandler(w http.ResponseWriter, r *http.Request) {
	w.Header().Set("Content-Type", "text/event-stream")

	tokens := strings.Split("Hey there Drew. I hope you enjoy The Alters!", " ")
	for _, token := range tokens {
		w.Write([]byte(fmt.Sprintf("data: %s \n\n", token)))
		w.(http.Flusher).Flush()
		time.Sleep(time.Millisecond * 420)
	}
}

Use go run main.go and try curling the the sse endpoint.

curl http://0.0.0.0:8888/sse