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  }