github.com/docker/engine@v22.0.0-20211208180946-d456264580cf+incompatible/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  	opts := []grpc.ServerOption{grpc.UnaryInterceptor(grpcerrors.UnaryServerInterceptor), grpc.StreamInterceptor(grpcerrors.StreamServerInterceptor)}
    19  	server := grpc.NewServer(opts...)
    20  
    21  	r := &grpcRouter{
    22  		h2Server:   &http2.Server{},
    23  		grpcServer: server,
    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 (r *grpcRouter) Routes() []router.Route {
    34  	return r.routes
    35  }
    36  
    37  func (r *grpcRouter) initRoutes() {
    38  	r.routes = []router.Route{
    39  		router.NewPostRoute("/grpc", r.serveGRPC),
    40  	}
    41  }