func main() { var ( port int ch chan bool = make(chan bool) logOutput bool conf string ) flag.IntVar(&port, "port", 14197, "") flag.StringVar(&conf, "conf", "app.conf", "") flag.BoolVar(&logOutput, "l", false, "log output") flag.Parse() log.SetOutput(os.Stdout) log.SetFlags(log.LstdFlags | log.Ltime | log.Ldate | log.Lshortfile) gof.CurrentApp = core.NewMainApp(conf) dps.Init(gof.CurrentApp) cache.Initialize(gof.CurrentApp.Storage()) fix.CustomFix() ts := tcpserve.NewServe(logOutput) ts.RegisterJob(tcpserve.MemberSummaryNotifyJob) //注册会员信息通知 ts.RegisterJob(tcpserve.AccountNotifyJob) //注册账户通知任务 go ts.Listen(fmt.Sprintf(":%d", port)) //启动服务 // 检测退出信号 go func(mainCh chan bool) { ch := make(chan os.Signal) signal.Notify(ch, syscall.SIGTERM, syscall.SIGKILL) for { switch <-ch { case syscall.SIGKILL, syscall.SIGTERM: log.Println("[ Tcp][ Term] - tcp serve has term!") close(mainCh) } } }(ch) log.Println("[ TCP][ SERVE] - socket is serve on port :", port) <-ch }
func main() { var ( ch chan bool = make(chan bool) confFile string httpPort int restPort int debug bool trace bool runDaemon bool // 运行daemon help bool newApp *core.MainApp ) flag.IntVar(&httpPort, "port", 14190, "web server port") flag.IntVar(&restPort, "restport", 14191, "rest api port") flag.BoolVar(&debug, "debug", false, "enable debug") flag.BoolVar(&trace, "trace", false, "enable trace") flag.BoolVar(&help, "help", false, "command usage") flag.StringVar(&confFile, "conf", "app.conf", "") flag.BoolVar(&runDaemon, "d", false, "run daemon") flag.Parse() if help { flag.Usage() return } log.SetOutput(os.Stdout) log.SetFlags(log.LstdFlags | log.Ltime | log.Ldate | log.Lshortfile) runtime.GOMAXPROCS(runtime.NumCPU()) newApp = core.NewMainApp(confFile) if !newApp.Init(debug, trace) { os.Exit(1) } fix.CustomFix() go fix.SignalNotify(ch) if v := newApp.Config().GetInt("server_port"); v != 0 { httpPort = v } if v := newApp.Config().GetInt("api_service_port"); v != 0 { restPort = v } gof.CurrentApp = newApp dps.Init(newApp) cache.Initialize(storage.NewRedisStorage(newApp.Redis())) session.Set(newApp.Storage(), "") var booted bool if runDaemon { go daemon.Run(newApp) } go app.Run(ch, newApp, fmt.Sprintf(":%d", httpPort)) //运行HTTP go restapi.Run(newApp, restPort) // 运行REST API if booted { <-ch } os.Exit(1) // 退出 }