File tree Expand file tree Collapse file tree 2 files changed +65
-0
lines changed
Expand file tree Collapse file tree 2 files changed +65
-0
lines changed Original file line number Diff line number Diff line change 1+ package handler
2+
3+ import (
4+ "log"
5+ "net/http"
6+ "time"
7+ )
8+
9+ func SSEHandler (w http.ResponseWriter , r * http.Request ) {
10+ w .Header ().Set ("Content-Type" , "text/event-stream" )
11+
12+ flusher , ok := w .(http.Flusher )
13+ if ! ok {
14+ http .Error (w , "Streaming unsupported!" , http .StatusInternalServerError )
15+ return
16+ }
17+
18+ notify := r .Context ().Done ()
19+
20+ for {
21+ select {
22+ case <- notify :
23+ log .Println ("Client disconnected" )
24+ return
25+ default :
26+ event := "data: " + time .Now ().Format (time .RFC3339 ) + "\n \n "
27+ if _ , err := w .Write ([]byte (event )); err != nil {
28+ log .Println ("Write error:" , err )
29+ return
30+ }
31+ flusher .Flush ()
32+ time .Sleep (1 * time .Second )
33+ }
34+ }
35+ }
Original file line number Diff line number Diff line change 1+ package main
2+
3+ import (
4+ "log"
5+
6+ "github.com/go-kratos/examples/sse/handler"
7+ "github.com/go-kratos/kratos/v2"
8+ "github.com/go-kratos/kratos/v2/transport/http"
9+ "github.com/gorilla/mux"
10+ )
11+
12+ func main () {
13+ router := mux .NewRouter ()
14+ router .HandleFunc ("/sse" , handler .SSEHandler )
15+
16+ httpSrv := http .NewServer (http .Address (":8080" ), http .Timeout (0 ))
17+ httpSrv .HandlePrefix ("/" , router )
18+
19+ app := kratos .New (
20+ kratos .Name ("sse" ),
21+ kratos .Server (
22+ httpSrv ,
23+ ),
24+ )
25+
26+ log .Println ("Open http://127.0.0.1:8080/sse in your web browser" )
27+ if err := app .Run (); err != nil {
28+ log .Println (err )
29+ }
30+ }
You can’t perform that action at this time.
0 commit comments