grpc-bus-websocket-proxy-server
                                
                                
                                
                                    grpc-bus-websocket-proxy-server copied to clipboard
                            
                            
                            
                        Provides a WebSocket Proxy Server for browsers to connect to any GRPC service
GRPC-Bus WebSocket Proxy Server
This Node.js server acts as a proxy, connecting GRPC clients running in a browser context to standard GRPC service(s) via a WebSocket.
You'll want to use the GRPC Bus WebSocket Proxy Client to connect from the browser.
Usage
node server.js
How it Works
The browser client loads the Protobuf definition (either as a .proto
file or compiled as a .proto.json), and passes it to the server via
the initial message after creating the WebSocket connection.
Deployment
There is a Docker image built that can be run with:
docker run gabrielgrant/grpc-bus-websocket-proxy
It can also be deployed on a Kubernetes cluster using the included manifest:
kubectl create -f kubernetes-manifest.yaml
If redeploying, delete the earlier deployment first:
kubectl delete -f kubernetes-manifest.yaml && kubectl create -f kubernetes-manifest.yaml
TODO
- Upgrade to Protobuf JS v6
 - Serve static content
 - Allow server to load .proto file directly
 - Push .proto file from server to client
 - Validate service map against proto file
 - Beter Error Handling
 - Support bundled/synchronous loading of JSON-formatted protoDefs
 - Specify allowed connections as CLI arg: --allow [service_name:]server:port
 - Specify port as CLI arg: --port 8080
 
Publishing a new version:
git checkout master
git pull
npm version patch
git push
VERSION=$(cat package.json| jq --raw-output .version)
docker build -t gabrielgrant/grpc-bus-websocket-proxy:latest -t gabrielgrant/grpc-bus-websocket-proxy:$VERSION .
docker push gabrielgrant/grpc-bus-websocket-proxy:$VERSION
docker push gabrielgrant/grpc-bus-websocket-proxy:latest