package internal import ( "time" "github.com/zeromicro/go-zero/core/stat" "google.golang.org/grpc" "google.golang.org/grpc/health" "google.golang.org/grpc/keepalive" ) const defaultConnectionIdleDuration = time.Minute * 5 type ( // RegisterFn defines the method to register a server. RegisterFn func(*grpc.Server) // Server interface represents a rpc server. Server interface { AddOptions(options ...grpc.ServerOption) AddStreamInterceptors(interceptors ...grpc.StreamServerInterceptor) AddUnaryInterceptors(interceptors ...grpc.UnaryServerInterceptor) SetName(string) Start(register RegisterFn) error } baseRpcServer struct { address string health *health.Server metrics *stat.Metrics options []grpc.ServerOption streamInterceptors []grpc.StreamServerInterceptor unaryInterceptors []grpc.UnaryServerInterceptor } ) func newBaseRpcServer(address string, rpcServerOpts *rpcServerOptions) *baseRpcServer { var h *health.Server if rpcServerOpts.health { h = health.NewServer() } return &baseRpcServer{ address: address, health: h, metrics: rpcServerOpts.metrics, options: []grpc.ServerOption{grpc.KeepaliveParams(keepalive.ServerParameters{ MaxConnectionIdle: defaultConnectionIdleDuration, })}, } } func (s *baseRpcServer) AddOptions(options ...grpc.ServerOption) { s.options = append(s.options, options...) } func (s *baseRpcServer) AddStreamInterceptors(interceptors ...grpc.StreamServerInterceptor) { s.streamInterceptors = append(s.streamInterceptors, interceptors...) } func (s *baseRpcServer) AddUnaryInterceptors(interceptors ...grpc.UnaryServerInterceptor) { s.unaryInterceptors = append(s.unaryInterceptors, interceptors...) } func (s *baseRpcServer) SetName(name string) { s.metrics.SetName(name) }