github.com/angenalZZZ/gofunc@v0.0.0-20210507121333-48ff1be3917b/cmd/natsql/main.go (about) 1 ///go get github.com/angenalZZZ/gofunc/cmd/natsql 2 ///go build -ldflags "-s -w" -o A:/test/cmd/natsql/natsql.exe ./cmd/natsql 3 ///start A:/test/cmd/natsql/natsql.exe -t data.json 4 ///start A:/test/cmd/natsql/natsql.exe -c natsql.yaml 5 6 // CSharp(4CPU+16G+MHD).benchmark PUB:60K~100Kq/s SUB:100K~1Mq/s 7 8 package main 9 10 import ( 11 "flag" 12 "os" 13 "runtime" 14 "syscall" 15 "time" 16 17 "github.com/angenalZZZ/gofunc/f" 18 19 nat "github.com/angenalZZZ/gofunc/rpc/nats" 20 ) 21 22 func main() { 23 // Your Arguments. 24 initArgs() 25 if len(os.Args) < 2 { 26 flag.Usage() 27 return 28 } 29 30 // Check Arguments And Init Config. 31 checkArgs() 32 defer runtime.GOMAXPROCS(runtime.GOMAXPROCS(runtime.NumCPU())) 33 34 // Init complete. 35 runInit() 36 37 // Run script test. 38 runTest() 39 40 // Hot update script file. 41 go func() { 42 ticket := time.NewTicker(2 * time.Second) 43 for range ticket.C { 44 if !isScriptMod() { 45 continue 46 } 47 if err := doScriptMod(); err == nil { 48 createHandlers() // Init Subscribers And Handlers. 49 nat.Log.Info().Msg("Hot update natsql.yaml") 50 } else { 51 nat.Log.Info().Msg("Hot update natsql.yaml error: " + err.Error()) 52 } 53 } 54 }() 55 go func() { 56 ticket := time.NewTicker(2 * time.Second) 57 for range ticket.C { 58 for _, h := range handlers { 59 if !h.isScriptMod() { 60 continue 61 } 62 _ = h.doScriptMod() 63 nat.Log.Info().Msgf("Hot update %q natsql.js", h.sub.Subj) 64 } 65 } 66 }() 67 68 // Pass the signals you want to end your application. 69 death := f.NewDeath(syscall.SIGINT, syscall.SIGTERM) 70 // When you want to block for shutdown signals. 71 death.WaitForDeathWithFunc(func() { 72 stopHandlers() // Stop Subscribers And Handlers. 73 }) 74 }