dunglas / dunglas/frankenphp-grpc

Register caddy grpc handler?

Open
#4 3 comments 0 reactions 0 assignees View on GitHub
Dominant language
Go
Stars
104
Forks
2
PR merge metrics
No merged PRs in 30d

Description

I'm pretty sure you can register a grpc handler on the https handler of caddy (what we were talking about last night). The RPC is on a header, so you can actually chain a bunch of these servers.

```

package grpcmodule

import (
"context"
"net/http"

"github.com/caddyserver/caddy/v2"
"github.com/caddyserver/caddy/v2/modules/caddyhttp"
"google.golang.org/grpc"
)

func init() {
caddy.RegisterModule(GRPCHandler{})
}

type GRPCHandler struct {
grpcServer *grpc.Server
}

// CaddyModule returns the Caddy module information.
func (GRPCHandler) CaddyModule() caddy.ModuleInfo {
return caddy.ModuleInfo{
ID: "http.handlers.grpc",
New: func() caddy.Module { return new(GRPCHandler) },
}
}

func (h *GRPCHandler) Provision(ctx caddy.Context) error {
h.grpcServer = grpc.NewServer()
// register your gRPC services here
return nil
}

func (h *GRPCHandler) ServeHTTP(w http.ResponseWriter, r *http.Request, next caddyhttp.Handler) error {
// let gRPC server handle the request
h.grpcServer.ServeHTTP(w, r)
return nil // gRPC server writes directly to ResponseWriter
}

// Interface guards
var (
_ caddy.Module = (*GRPCHandler)(nil)
_ caddyhttp.MiddlewareHandler = (*GRPCHandler)(nil)
)
```

My computer died, so I'm not 100% this is right.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.