You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
116 lines
2.2 KiB
116 lines
2.2 KiB
package main |
|
|
|
// Start Commond eg:./push 1 500 127.0.0.1:7831 100 |
|
// first parameter:beginning port |
|
// second parameter: end port |
|
// third parameter: comet server ip |
|
// fourth parameter: runing time |
|
|
|
import ( |
|
"context" |
|
"fmt" |
|
"log" |
|
"net/url" |
|
"os" |
|
"runtime" |
|
"strconv" |
|
"time" |
|
|
|
bm "go-common/library/net/http/blademaster" |
|
"go-common/library/net/netutil/breaker" |
|
xtime "go-common/library/time" |
|
) |
|
|
|
var ( |
|
lg *log.Logger |
|
httpClient *bm.Client |
|
t int |
|
) |
|
|
|
const TestContent = "{\"test\":1}" |
|
|
|
func main() { |
|
runtime.GOMAXPROCS(runtime.NumCPU()) |
|
infoLogfi, err := os.OpenFile("./pushs.log", os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0644) |
|
if err != nil { |
|
panic(err) |
|
} |
|
lg = log.New(infoLogfi, "", log.LstdFlags|log.Lshortfile) |
|
|
|
begin, err := strconv.Atoi(os.Args[1]) |
|
if err != nil { |
|
panic(err) |
|
} |
|
end, err := strconv.Atoi(os.Args[2]) |
|
if err != nil { |
|
panic(err) |
|
} |
|
|
|
t, err = strconv.Atoi(os.Args[4]) |
|
if err != nil { |
|
panic(err) |
|
} |
|
|
|
num := runtime.NumCPU() * 2 |
|
lg.Printf("start routine num:%d", num) |
|
|
|
l := end / num |
|
b, e := begin, begin+l |
|
time.AfterFunc(time.Duration(t)*time.Second, stop) |
|
for i := begin; i <= end; i++ { |
|
this := i |
|
go func() { |
|
for { |
|
startPush(this, num) |
|
time.Sleep(time.Second) |
|
} |
|
}() |
|
} |
|
|
|
for i := 0; i < num; i++ { |
|
go startPush(b, e) |
|
b += l |
|
e += l |
|
} |
|
|
|
time.Sleep(9999 * time.Hour) |
|
} |
|
|
|
func init() { |
|
httpClient = bm.NewClient(&bm.ClientConfig{ |
|
App: &bm.App{ |
|
Key: "6aa4286456d16b97", |
|
Secret: "test", |
|
}, |
|
Dial: xtime.Duration(time.Second), |
|
Timeout: xtime.Duration(time.Second), |
|
KeepAlive: xtime.Duration(time.Second * 10), |
|
Breaker: &breaker.Config{ |
|
Window: xtime.Duration(time.Second), |
|
Sleep: xtime.Duration(time.Second), |
|
Bucket: 10, |
|
Ratio: 0.8, |
|
Request: 100, |
|
SwitchOff: false, |
|
}, |
|
}) |
|
} |
|
|
|
func stop() { |
|
os.Exit(-1) |
|
} |
|
|
|
func startPush(b, e int) { |
|
lg.Printf("start Push key from %d to %d", b, e) |
|
for i := b; i < b+e; i++ { |
|
params := url.Values{} |
|
params.Set("operation", "9") |
|
params.Set("keys", strconv.Itoa(b)) |
|
params.Set("message", TestContent) |
|
err := httpClient.Get(context.Background(), fmt.Sprintf("http://%s/x/internal/broadcast/push/keys", os.Args[3]), "", params, nil) |
|
if err != nil { |
|
lg.Printf("get error (%v)", err) |
|
return |
|
} |
|
} |
|
}
|
|
|