func RunServer(addr_tcp string, addr_monitor string, errLogger *common.ErrorLogger) { runtime.GOMAXPROCS(runtime.NumCPU()) errLogger.Println("program start.") tcpAddr, err := net.ResolveTCPAddr("tcp", addr_tcp) if err != nil { errLogger.Fatalln("ResolveTCPAddr:", err) } controledListener, err := GetControledListener(tcpAddr) if err != nil { errLogger.Fatalln("GetControledListener:", err) } tcpMonitor, err := net.ResolveTCPAddr("tcp", addr_monitor) if err != nil { errLogger.Fatalln("ResolveMonitorAddr:", err) } controledMonitor, err := GetControledListener(tcpMonitor) if err != nil { errLogger.Fatalln("GetControledMonitorListener:", err) } //强杀 common.SignalWatchRegister(func() { os.Exit(-1) }, syscall.SIGTERM) //和平结束 common.SignalWatchRegister(func() { controledListener.Close(); controledMonitor.Close() }, os.Interrupt) //重启 common.SignalWatchRegister(func() { ReceiveSignupSignal(controledListener, errLogger) }, syscall.SIGHUP) common.SignalWatchRun() services := Services{wg: &sync.WaitGroup{}} //启动tcp服务 services.wg.Add(1) go services.RunTcpServe(controledListener, errLogger) services.wg.Add(1) go services.RunHttpServe(controledMonitor, controledListener, errLogger) //等等所有服务协程都结束 services.wg.Wait() errLogger.Println("program stop normal.") }