No need for more than one client with internal concurrency

This commit is contained in:
Tomás Senart
2013-08-14 21:03:03 +02:00
parent 06a27404fa
commit 0d22f32683
2 changed files with 11 additions and 17 deletions

18
main.go
View File

@@ -4,7 +4,6 @@ import (
"flag"
"io"
"log"
"math"
"math/rand"
"net/http"
"os"
@@ -89,23 +88,14 @@ func main() {
}
func attack(targets Targets, ordering string, rate uint, duration time.Duration, rep Reporter) {
// Magic formula that assumes each client can
// sustain 200 RPS under normal circumstances
clients := make([]*Client, int(math.Ceil(float64(rate)/200.0)))
ratePerClient := rate / uint(len(clients))
for i := 0; i < len(clients); i++ {
clients[i] = NewClient(ratePerClient)
}
hits := make(chan *http.Request, rate*uint((duration).Seconds()))
defer close(hits)
for i, idxs := 0, targets.Iter(ordering); i < cap(hits); i++ {
hits <- targets[idxs[i%len(idxs)]]
}
responses := make(chan *Response, cap(hits))
defer close(responses)
for _, client := range clients {
go client.Drill(hits, responses) // Attack!
client := NewClient(rate)
go client.Drill(hits, responses) // Attack!
for i, idxs := 0, targets.Iter(ordering); i < cap(hits); i++ {
hits <- targets[idxs[i%len(idxs)]]
}
// Wait for all requests to finish
for i := 0; i < cap(responses); i++ {