dunglas / dunglas/frankenphp-grpc
Register caddy grpc handler?
- 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
Assessment
This issue has not been assessed yet.