From dd18dc9ee844c20548937e81983ebdb1bd38eda9 Mon Sep 17 00:00:00 2001 From: "Gerasimos (Makis) Maropoulos" Date: Fri, 6 Mar 2020 12:28:08 +0200 Subject: [PATCH] Add a gRPC router wrapper, useful for the upcoming grpc controller example Former-commit-id: ae4c29597ce1336a74278b86b59d08b6c91eab0a --- _examples/websocket/socketio/main.go | 5 +++++ middleware/grpc/grpc.go | 30 ++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+) create mode 100644 middleware/grpc/grpc.go diff --git a/_examples/websocket/socketio/main.go b/_examples/websocket/socketio/main.go index 3e218052..6605c8a5 100644 --- a/_examples/websocket/socketio/main.go +++ b/_examples/websocket/socketio/main.go @@ -52,3 +52,8 @@ func main() { iris.WithoutServerError(iris.ErrServerClosed), ) } + +/* +If you want to enable CORS in your websocket handler, +please follow this post: https://github.com/googollee/go-socket.io/issues/242 +*/ \ No newline at end of file diff --git a/middleware/grpc/grpc.go b/middleware/grpc/grpc.go new file mode 100644 index 00000000..504b8a9c --- /dev/null +++ b/middleware/grpc/grpc.go @@ -0,0 +1,30 @@ +package grpc + +import ( + "net/http" + "strings" + + "github.com/kataras/iris/v12/core/router" +) + +// New returns a new gRPC Iris router wrapper for a gRPC server. +// useful when you want to share one port (such as 443 for https) between gRPC and Iris. +// +// The Iris server SHOULD run under HTTP/2 and clients too. +// +// Usage: +// import grpcWrapper "github.com/kataras/iris/v12/middleware/grpc" +// [...] +// app := iris.New() +// grpcServer := grpc.NewServer() +// app.WrapRouter(grpcWrapper.New(grpcServer)) +func New(grpcServer http.Handler) router.WrapperFunc { + return func(w http.ResponseWriter, r *http.Request, mux http.HandlerFunc) { + if r.ProtoMajor == 2 && strings.HasPrefix( + r.Header.Get("Content-Type"), "application/grpc") { + grpcServer.ServeHTTP(w, r) + } else { + mux.ServeHTTP(w, r) + } + } +}