mirror of
https://github.com/kataras/iris.git
synced 2025-02-02 15:30:36 +01:00
60 lines
1.3 KiB
Go
60 lines
1.3 KiB
Go
|
package main
|
||
|
|
||
|
import (
|
||
|
"log"
|
||
|
"net/http"
|
||
|
"os"
|
||
|
"strconv"
|
||
|
"time"
|
||
|
|
||
|
"github.com/alexandrevicenzi/go-sse"
|
||
|
"github.com/kataras/iris/v12"
|
||
|
)
|
||
|
|
||
|
// Install the sse third-party package
|
||
|
// $ go get -u github.com/alexandrevicenzi/go-sse
|
||
|
func main() {
|
||
|
s := sse.NewServer(&sse.Options{
|
||
|
// Increase default retry interval to 10s.
|
||
|
RetryInterval: 10 * 1000,
|
||
|
// CORS headers
|
||
|
Headers: map[string]string{
|
||
|
"Access-Control-Allow-Origin": "*",
|
||
|
"Access-Control-Allow-Methods": "GET, OPTIONS",
|
||
|
"Access-Control-Allow-Headers": "Keep-Alive,X-Requested-With,Cache-Control,Content-Type,Last-Event-ID",
|
||
|
},
|
||
|
// Custom channel name generator
|
||
|
ChannelNameFunc: func(request *http.Request) string {
|
||
|
return request.URL.Path
|
||
|
},
|
||
|
// Print debug info
|
||
|
Logger: log.New(os.Stdout, "go-sse: ", log.Ldate|log.Ltime|log.Lshortfile),
|
||
|
})
|
||
|
|
||
|
defer s.Shutdown()
|
||
|
|
||
|
app := iris.New()
|
||
|
app.Get("/", func(ctx iris.Context) {
|
||
|
ctx.ServeFile("../static/index.html")
|
||
|
})
|
||
|
app.Get("/events/{channel}", iris.FromStd(s))
|
||
|
|
||
|
go func() {
|
||
|
for {
|
||
|
s.SendMessage("/events/channel-1", sse.SimpleMessage(time.Now().Format("2006/02/01/ 15:04:05")))
|
||
|
time.Sleep(5 * time.Second)
|
||
|
}
|
||
|
}()
|
||
|
|
||
|
go func() {
|
||
|
i := 0
|
||
|
for {
|
||
|
i++
|
||
|
s.SendMessage("/events/channel-2", sse.SimpleMessage(strconv.Itoa(i)))
|
||
|
time.Sleep(5 * time.Second)
|
||
|
}
|
||
|
}()
|
||
|
|
||
|
app.Listen(":3000")
|
||
|
}
|