go-common/app/interface/main/broadcast/benchmark/push_room/main.go

97 lines
1.9 KiB
Go
Raw Normal View History

2019-04-22 10:49:16 +00:00
package main
// Start Commond eg: ./push_room test://test_room 10 100 127.0.0.1:7831
// first parameter: room id
// second parameter: routine count
// third parameter: running time
// fourth parameter: service server ip
import (
"context"
"fmt"
"net/url"
"os"
"strconv"
"time"
bm "go-common/library/net/http/blademaster"
"go-common/library/net/netutil/breaker"
xtime "go-common/library/time"
)
var (
httpClient *bm.Client
)
const TestContent = "{\"test\":\"test push room\"}"
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 main() {
rountineNum, err := strconv.Atoi(os.Args[2])
if err != nil {
panic(err)
}
t, err := strconv.Atoi(os.Args[3])
if err != nil {
panic(err)
}
addr := os.Args[4]
time.AfterFunc(time.Duration(t)*time.Second, stop)
gap := time.Second / time.Duration(rountineNum)
delay := time.Duration(0)
go run(addr, time.Duration(0)*time.Second)
for i := 0; i < rountineNum-1; i++ {
go run(addr, delay)
delay += gap
fmt.Println("delay:", delay)
}
time.Sleep(9999 * time.Hour)
}
func run(addr string, delay time.Duration) {
time.Sleep(delay)
i := int64(0)
for {
go post(addr, i)
time.Sleep(time.Second)
i++
}
}
func stop() {
os.Exit(-1)
}
func post(addr string, i int64) {
params := url.Values{}
params.Set("room", os.Args[1])
params.Set("operation", "9")
params.Set("message", TestContent)
if err := httpClient.Get(context.Background(), "http://"+addr+"/x/internal/broadcast/push/room", "", params, nil); err != nil {
fmt.Printf("Error: bm.post() error(%s)\n", err.Error())
return
}
}