grpc.go 989 B

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. r := &grpcRouter{
  16. h2Server: &http2.Server{},
  17. grpcServer: grpc.NewServer(
  18. grpc.UnaryInterceptor(grpcerrors.UnaryServerInterceptor),
  19. grpc.StreamInterceptor(grpcerrors.StreamServerInterceptor),
  20. ),
  21. }
  22. for _, b := range backends {
  23. b.RegisterGRPC(r.grpcServer)
  24. }
  25. r.initRoutes()
  26. return r
  27. }
  28. // Routes returns the available routers to the session controller
  29. func (gr *grpcRouter) Routes() []router.Route {
  30. return gr.routes
  31. }
  32. func (gr *grpcRouter) initRoutes() {
  33. gr.routes = []router.Route{
  34. router.NewPostRoute("/grpc", gr.serveGRPC),
  35. }
  36. }