Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/tmc/grpc-websocket-proxy

A proxy to transparently upgrade grpc-gateway streaming endpoints to use websockets
https://github.com/tmc/grpc-websocket-proxy

grpc grpc-gateway proxy websocket

Last synced: 3 days ago
JSON representation

A proxy to transparently upgrade grpc-gateway streaming endpoints to use websockets

Awesome Lists containing this project

README

        

# grpc-websocket-proxy

[![GoDoc](https://godoc.org/github.com/tmc/grpc-websocket-proxy/wsproxy?status.svg)](http://godoc.org/github.com/tmc/grpc-websocket-proxy/wsproxy)

Wrap your grpc-gateway mux with this helper to expose streaming endpoints over websockets.

On the wire this uses newline-delimited json encoding of the messages.

Usage:
```diff
mux := runtime.NewServeMux()
opts := []grpc.DialOption{grpc.WithInsecure()}
if err := echoserver.RegisterEchoServiceHandlerFromEndpoint(ctx, mux, *grpcAddr, opts); err != nil {
return err
}
- http.ListenAndServe(*httpAddr, mux)
+ http.ListenAndServe(*httpAddr, wsproxy.WebsocketProxy(mux))
```

# wsproxy
import "github.com/tmc/grpc-websocket-proxy/wsproxy"

Package wsproxy implements a websocket proxy for grpc-gateway backed services

## Usage

```go
var (
MethodOverrideParam = "method"
TokenCookieName = "token"
)
```

#### func WebsocketProxy

```go
func WebsocketProxy(h http.Handler) http.HandlerFunc
```
WebsocketProxy attempts to expose the underlying handler as a bidi websocket
stream with newline-delimited JSON as the content encoding.

The HTTP Authorization header is either populated from the
Sec-Websocket-Protocol field or by a cookie. The cookie name is specified by the
TokenCookieName value.

example:

Sec-Websocket-Protocol: Bearer, foobar

is converted to:

Authorization: Bearer foobar

Method can be overwritten with the MethodOverrideParam get parameter in the
requested URL