examples: server-sent events: add a second 3rd-party pkg usage example

This commit is contained in:
Gerasimos (Makis) Maropoulos 2021-01-27 04:32:52 +02:00
parent ce25e698f8
commit bccd5eb388
No known key found for this signature in database
GPG Key ID: 5DBE766BD26A54E7
2 changed files with 62 additions and 2 deletions

View File

@ -184,8 +184,9 @@
* [HTTP/2 Server Push](response-writer/http2push/main.go)
* [Stream Writer](response-writer/stream-writer/main.go)
* [Transactions](response-writer/transactions/main.go)
* [SSE](response-writer/sse/main.go)
* [SSE (third-party package usage for server sent events)](response-writer/sse-third-party/main.go)
* [Server-Sent Events](response-writer/sse/main.go)
* [SSE 3rd-party (r3labs/sse)](response-writer/sse-third-party/main.go)
* [SSE 3rd-party (alexandrevicenzi/go-sse)](response-writer/sse-third-party-2/main.go)
* Cache
* [Simple](response-writer/cache/simple/main.go)
* [Client-Side (304)](response-writer/cache/client-side/main.go)

View File

@ -0,0 +1,59 @@
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")
}