main.go 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. package main
  2. // Start Commond eg:./push 1 500 127.0.0.1:7831 100
  3. // first parameter:beginning port
  4. // second parameter: end port
  5. // third parameter: comet server ip
  6. // fourth parameter: runing time
  7. import (
  8. "context"
  9. "fmt"
  10. "log"
  11. "net/url"
  12. "os"
  13. "runtime"
  14. "strconv"
  15. "time"
  16. bm "go-common/library/net/http/blademaster"
  17. "go-common/library/net/netutil/breaker"
  18. xtime "go-common/library/time"
  19. )
  20. var (
  21. lg *log.Logger
  22. httpClient *bm.Client
  23. t int
  24. )
  25. const TestContent = "{\"test\":1}"
  26. func main() {
  27. runtime.GOMAXPROCS(runtime.NumCPU())
  28. infoLogfi, err := os.OpenFile("./pushs.log", os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0644)
  29. if err != nil {
  30. panic(err)
  31. }
  32. lg = log.New(infoLogfi, "", log.LstdFlags|log.Lshortfile)
  33. begin, err := strconv.Atoi(os.Args[1])
  34. if err != nil {
  35. panic(err)
  36. }
  37. end, err := strconv.Atoi(os.Args[2])
  38. if err != nil {
  39. panic(err)
  40. }
  41. t, err = strconv.Atoi(os.Args[4])
  42. if err != nil {
  43. panic(err)
  44. }
  45. num := runtime.NumCPU() * 2
  46. lg.Printf("start routine num:%d", num)
  47. l := end / num
  48. b, e := begin, begin+l
  49. time.AfterFunc(time.Duration(t)*time.Second, stop)
  50. for i := begin; i <= end; i++ {
  51. this := i
  52. go func() {
  53. for {
  54. startPush(this, num)
  55. time.Sleep(time.Second)
  56. }
  57. }()
  58. }
  59. for i := 0; i < num; i++ {
  60. go startPush(b, e)
  61. b += l
  62. e += l
  63. }
  64. time.Sleep(9999 * time.Hour)
  65. }
  66. func init() {
  67. httpClient = bm.NewClient(&bm.ClientConfig{
  68. App: &bm.App{
  69. Key: "6aa4286456d16b97",
  70. Secret: "test",
  71. },
  72. Dial: xtime.Duration(time.Second),
  73. Timeout: xtime.Duration(time.Second),
  74. KeepAlive: xtime.Duration(time.Second * 10),
  75. Breaker: &breaker.Config{
  76. Window: xtime.Duration(time.Second),
  77. Sleep: xtime.Duration(time.Second),
  78. Bucket: 10,
  79. Ratio: 0.8,
  80. Request: 100,
  81. SwitchOff: false,
  82. },
  83. })
  84. }
  85. func stop() {
  86. os.Exit(-1)
  87. }
  88. func startPush(b, e int) {
  89. lg.Printf("start Push key from %d to %d", b, e)
  90. for i := b; i < b+e; i++ {
  91. params := url.Values{}
  92. params.Set("operation", "9")
  93. params.Set("keys", strconv.Itoa(b))
  94. params.Set("message", TestContent)
  95. err := httpClient.Get(context.Background(), fmt.Sprintf("http://%s/x/internal/broadcast/push/keys", os.Args[3]), "", params, nil)
  96. if err != nil {
  97. lg.Printf("get error (%v)", err)
  98. return
  99. }
  100. }
  101. }