1. zrpc.MustNewServer(c RpcServerConf, register internal.RegisterFn) *RpcServer

  2. zrpc.RpcServer

type RpcServer struct {
	server   internal.Server
	register internal.RegisterFn
} 
  1. 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.rpcServer
  1. internal.keepAliveServer
type keepAliveServer struct {
	registerEtcd func() error
	Server internal.Server
}
 
此处 
internal.Server = NewRpcServer(listenOn, middlewares, opts...)

internal.Server = internal.rpcServer
  1. zrpc.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
}
 
  1. internal.baseRpcServer
	baseRpcServer struct {
		address            string
		health             *health.Server
		metrics            *stat.Metrics
		options            []grpc.ServerOption
		streamInterceptors []grpc.StreamServerInterceptor
		unaryInterceptors  []grpc.UnaryServerInterceptor
	}
  1. zrpc.Server.Start() 过程
  • zrpc.Server.Start() internal.KeepAliveServer.Start() internal.rpcServer.Start()
  • zrpc.Server.Start() internal.rpcServer.Start()

internal.rpcServer.Start()grpc.NewServer().Serve()

  1. zrpc.Server.Stop() logx.Close()