// New Go Routine based server func RunServer(opts *server.Options) *server.Server { if opts == nil { opts = &DefaultTestOptions } s := server.New(opts) if s == nil { panic("No NATS Server object returned.") } // Run server in Go routine. go s.Start() // Make sure we are running and can bind before returning. addr := fmt.Sprintf("%s:%d", opts.Host, opts.Port) end := time.Now().Add(10 * time.Second) for time.Now().Before(end) { conn, err := net.Dial("tcp", addr) if err != nil { time.Sleep(50 * time.Millisecond) // Retry continue } conn.Close() return s } panic("Unable to start NATS Server in Go Routine") }
// New Go Routine based server func RunServer(opts *server.Options) *server.Server { if opts == nil { opts = &DefaultTestOptions } s := server.New(opts) if s == nil { panic("No NATS Server object returned.") } // Run server in Go routine. go s.Start() // Make sure we are running and can bind before returning. end := time.Now().Add(10 * time.Second) for time.Now().Before(end) { addr := s.Addr() if addr == nil { time.Sleep(10 * time.Millisecond) // Retry. We might take a little while to open a connection. continue } conn, err := net.Dial("tcp", addr.String()) if err != nil { time.Sleep(50 * time.Millisecond) // Retry continue } conn.Close() return s } panic("Unable to start NATS Server in Go Routine") }
func main() { // logging setup server.LogSetup() // Server Options opts := server.Options{} var showVersion bool var debugAndTrace bool var configFile string // Parse flags flag.IntVar(&opts.Port, "port", 0, "Port to listen on.") flag.IntVar(&opts.Port, "p", 0, "Port to listen on.") flag.StringVar(&opts.Host, "addr", "", "Network host to listen on.") flag.StringVar(&opts.Host, "a", "", "Network host to listen on.") flag.StringVar(&opts.Host, "net", "", "Network host to listen on.") flag.BoolVar(&opts.Debug, "D", false, "Enable Debug logging.") flag.BoolVar(&opts.Debug, "debug", false, "Enable Debug logging.") flag.BoolVar(&opts.Trace, "V", false, "Enable Trace logging.") flag.BoolVar(&opts.Trace, "trace", false, "Enable Trace logging.") flag.BoolVar(&debugAndTrace, "DV", false, "Enable Debug and Trace logging.") flag.BoolVar(&opts.Logtime, "T", true, "Timestamp log entries.") flag.BoolVar(&opts.Logtime, "logtime", true, "Timestamp log entries.") flag.StringVar(&opts.Username, "user", "", "Username required for connection.") flag.StringVar(&opts.Password, "pass", "", "Password required for connection.") flag.StringVar(&opts.Authorization, "auth", "", "Authorization token required for connection.") flag.IntVar(&opts.HTTPPort, "m", 0, "HTTP Port for /varz, /connz endpoints.") flag.IntVar(&opts.HTTPPort, "http_port", 0, "HTTP Port for /varz, /connz endpoints.") flag.StringVar(&configFile, "c", "", "Configuration file.") flag.StringVar(&configFile, "config", "", "Configuration file.") flag.StringVar(&opts.PidFile, "P", "", "File to store process pid.") flag.StringVar(&opts.PidFile, "pid", "", "File to store process pid.") flag.StringVar(&opts.LogFile, "l", "", "File to store logging output.") flag.StringVar(&opts.LogFile, "log", "", "File to store logging output.") flag.BoolVar(&showVersion, "version", false, "Print version information.") flag.BoolVar(&showVersion, "v", false, "Print version information.") flag.IntVar(&opts.ProfPort, "profile", 0, "Profiling HTTP port") flag.Usage = server.Usage flag.Parse() // Show version and exit if showVersion { server.PrintServerAndExit() } // One flag can set multiple options. if debugAndTrace { opts.Trace, opts.Debug = true, true } // Process args looking for non-flag options, // 'version' and 'help' only for now for _, arg := range flag.Args() { switch strings.ToLower(arg) { case "version": server.PrintServerAndExit() case "help": server.Usage() } } // Parse config if given if configFile != "" { fileOpts, err := server.ProcessConfigFile(configFile) if err != nil { server.PrintAndDie(err.Error()) } opts = *server.MergeOptions(fileOpts, &opts) } // Remove any host/ip that points to itself in Route newroutes, err := server.RemoveSelfReference(opts.ClusterPort, opts.Routes) if err != nil { server.PrintAndDie(err.Error()) } opts.Routes = newroutes // Create the server with appropriate options. s := server.New(&opts) // Start things up. Block here until done. s.Start() }