Skip to content

Commit 61daed1

Browse files
authored
feat: add new example: sse (#52)
1 parent 3a46aa3 commit 61daed1

File tree

2 files changed

+65
-0
lines changed

2 files changed

+65
-0
lines changed

sse/handler/handler.go

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
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+
}

sse/main.go

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
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+
}

0 commit comments

Comments
 (0)