github.com/Heebron/moby@v0.0.0-20221111184709-6eab4f55faf7/api/server/router/grpc/grpc.go (about)

     1  package grpc // import "github.com/docker/docker/api/server/router/grpc"
     2  
     3  import (
     4  	"github.com/docker/docker/api/server/router"
     5  	"github.com/moby/buildkit/util/grpcerrors"
     6  	"golang.org/x/net/http2"
     7  	"google.golang.org/grpc"
     8  )
     9  
    10  type grpcRouter struct {
    11  	routes     []router.Route
    12  	grpcServer *grpc.Server
    13  	h2Server   *http2.Server
    14  }
    15  
    16  // NewRouter initializes a new grpc http router
    17  func NewRouter(backends ...Backend) router.Router {
    18  	r := &grpcRouter{
    19  		h2Server: &http2.Server{},
    20  		grpcServer: grpc.NewServer(
    21  			grpc.UnaryInterceptor(grpcerrors.UnaryServerInterceptor),
    22  			grpc.StreamInterceptor(grpcerrors.StreamServerInterceptor),
    23  		),
    24  	}
    25  	for _, b := range backends {
    26  		b.RegisterGRPC(r.grpcServer)
    27  	}
    28  	r.initRoutes()
    29  	return r
    30  }
    31  
    32  // Routes returns the available routers to the session controller
    33  func (gr *grpcRouter) Routes() []router.Route {
    34  	return gr.routes
    35  }
    36  
    37  func (gr *grpcRouter) initRoutes() {
    38  	gr.routes = []router.Route{
    39  		router.NewPostRoute("/grpc", gr.serveGRPC),
    40  	}
    41  }