-
zrpc.MustNewServer(c RpcServerConf, register internal.RegisterFn) *RpcServer -
zrpc.RpcServer
type RpcServer struct {
server internal.Server
register internal.RegisterFn
} internal.Server is interface
if c.HasEtcd() {
server, err = internal.NewRpcPubServer(c.Etcd, c.ListenOn, c.Middlewares, serverOptions...)
} else {
server = internal.NewRpcServer(c.ListenOn, c.Middlewares, serverOptions...)
}
internal.Server = internal.keepAliveServer or
internal.Server = internal.rpcServerinternal.keepAliveServer
type keepAliveServer struct {
registerEtcd func() error
Server internal.Server
}
此处
internal.Server = NewRpcServer(listenOn, middlewares, opts...)
即
internal.Server = internal.rpcServerzrpc.RpcServer
type RpcServer struct {
server : internal.KeepAliveServer {
registerEtcd func() error
Server: internal.rpcServer{
*internal.baseRpcServer
name string
middlewares ServerMiddlewaresConf
healthManager health.Probe
}
}
register: internal.RegisterFn
}
当 c.HasEtcd() = false 时
type RpcServer struct {
server : internal.rpcServer{
*internal.baseRpcServer
name string
middlewares ServerMiddlewaresConf
healthManager health.Probe
}
register: internal.RegisterFn
}
internal.baseRpcServer
baseRpcServer struct {
address string
health *health.Server
metrics *stat.Metrics
options []grpc.ServerOption
streamInterceptors []grpc.StreamServerInterceptor
unaryInterceptors []grpc.UnaryServerInterceptor
}zrpc.Server.Start()过程
zrpc.Server.Start()→internal.KeepAliveServer.Start()→internal.rpcServer.Start()zrpc.Server.Start()→internal.rpcServer.Start()
internal.rpcServer.Start() 中 grpc.NewServer().Serve()
zrpc.Server.Stop()→logx.Close()