grpc.go 1.0 KB

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