From bccd5eb388b79ee398adc193e9762764abcbdf42 Mon Sep 17 00:00:00 2001 From: "Gerasimos (Makis) Maropoulos" Date: Wed, 27 Jan 2021 04:32:52 +0200 Subject: [PATCH] examples: server-sent events: add a second 3rd-party pkg usage example --- _examples/README.md | 5 +- .../response-writer/sse-third-party-2/main.go | 59 +++++++++++++++++++ 2 files changed, 62 insertions(+), 2 deletions(-) create mode 100644 _examples/response-writer/sse-third-party-2/main.go diff --git a/_examples/README.md b/_examples/README.md index 22f7485f..6c91df0e 100644 --- a/_examples/README.md +++ b/_examples/README.md @@ -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) diff --git a/_examples/response-writer/sse-third-party-2/main.go b/_examples/response-writer/sse-third-party-2/main.go new file mode 100644 index 00000000..eb9f83ca --- /dev/null +++ b/_examples/response-writer/sse-third-party-2/main.go @@ -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") +}