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.

25 lines
907 B
Markdown

# learning_sse
Learning [Server Side Events](https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events) can be fun.
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
```