This is a gRPC server and a client that allows to proxy network connections via the server.
Let's say you already have a gRPC server written in Go, something like this:
grpcServer := grpc.NewServer()
myFancyService := myfancyservice.New()
myFancyService_grpc.RegisterMyFancyServiceServer(grpcServer, myFancyService)
To add the proxy capability you just need to register the proxy service as well:
import "github.com/xaionaro-go/grpcproxy/grpcproxyserver"
import "github.com/xaionaro-go/grpcproxy/protobuf/go/proxy_grpc"
grpcServer := grpc.NewServer()
myFancyService := myfancyservice.New()
myfancyservice_grpc.RegisterMyFancyServiceServer(grpcServer, myFancyService)
proxyServer := grpcproxyserver.New()
proxy_grpc.RegisterNetworkProxyServer(grpcServer, proxyServer)
On the client side you may replace a direct connection:
conn, err := net.Dial("tcp", addr)
with proxied connection:
conn, err := grpchttpproxy.NewDialer(myGRPCClient).DialContext(ctx, "tcp", addr)
Or if you need to proxy an HTTP request, you may make an HTTP client:
httpClient := &http.Client{
Transport: &http.Transport{
DialContext: grpchttpproxy.NewDialer(myGRPCClient).DialContext,
},
}
And then perform the HTTP requests via this client