Skip to content

Commit 5a3090c

Browse files
committed
first commit
1 parent 25352f2 commit 5a3090c

20 files changed

+1318
-1
lines changed

README.md

+5-1
Original file line numberDiff line numberDiff line change
@@ -1 +1,5 @@
1-
# http-benchmark
1+
# http-benchmark
2+
3+
##### HTTP QPS
4+
5+
<img src="https://raw.githubusercontent.com/hslam/http-benchmark/master/http-qps.png" width = "400" height = "300" alt="qps" align=center><img src="https://raw.githubusercontent.com/hslam/http-benchmark/master/http-p99.png" width = "400" height = "300" alt="p99" align=center>

client/client.go

+62
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
package main
2+
3+
import (
4+
"flag"
5+
"github.com/hslam/stats"
6+
"io"
7+
"io/ioutil"
8+
"net/http"
9+
)
10+
11+
var addr string
12+
var clients int
13+
var total int
14+
var parallel int
15+
var bar bool
16+
17+
func init() {
18+
flag.StringVar(&addr, "addr", ":8080", "-addr=:8080")
19+
flag.IntVar(&total, "total", 100000, "-total=100000")
20+
flag.IntVar(&clients, "clients", 1, "-clients=1")
21+
flag.IntVar(&parallel, "parallel", 1, "-parallel=1")
22+
flag.BoolVar(&bar, "bar", true, "bar: -bar=true")
23+
flag.Parse()
24+
stats.SetBar(bar)
25+
}
26+
func main() {
27+
if clients < 1 || total < 1 {
28+
return
29+
}
30+
var wrkClients = make([]stats.Client, clients)
31+
for i := 0; i < clients; i++ {
32+
var conn = &WrkClient{}
33+
conn.client = &http.Client{
34+
Transport: &http.Transport{
35+
MaxConnsPerHost: parallel + 1,
36+
},
37+
}
38+
conn.url = "http://" + addr
39+
conn.method = "GET"
40+
wrkClients[i] = conn
41+
}
42+
stats.StartPrint(parallel, total, wrkClients)
43+
}
44+
45+
type WrkClient struct {
46+
client *http.Client
47+
url string
48+
method string
49+
}
50+
51+
func (c *WrkClient) Call() (int64, int64, bool) {
52+
req, _ := http.NewRequest(c.method, c.url, nil)
53+
resp, err := c.client.Do(req)
54+
if err != nil {
55+
return 0, 0, false
56+
}
57+
written, err := io.Copy(ioutil.Discard, resp.Body)
58+
if err != nil {
59+
return 0, 0, false
60+
}
61+
return 0, written, true
62+
}

fasthttp/README.md

+133
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,133 @@
1+
# fasthttp
2+
3+
```
4+
Summary:
5+
Clients: 1
6+
Parallel calls per client: 1
7+
Total calls: 1000000
8+
Total time: 89.53s
9+
Requests per second: 11168.85
10+
Fastest time for request: 0.06ms
11+
Average time per request: 0.09ms
12+
Slowest time for request: 4.33ms
13+
14+
Time:
15+
0.1% time for request: 0.07ms
16+
1% time for request: 0.07ms
17+
5% time for request: 0.07ms
18+
10% time for request: 0.08ms
19+
25% time for request: 0.08ms
20+
50% time for request: 0.09ms
21+
75% time for request: 0.09ms
22+
90% time for request: 0.10ms
23+
95% time for request: 0.11ms
24+
99% time for request: 0.14ms
25+
99.9% time for request: 0.21ms
26+
27+
Response:
28+
Total response body sizes: 11000000
29+
Average body size per response: 11.00 Byte
30+
Response rate per second: 122857.32 Byte/s (0.12 MByte/s)
31+
32+
Result:
33+
Response ok: 1000000 (100.00%)
34+
Errors: 0 (0.00%)
35+
36+
Summary:
37+
Clients: 2
38+
Parallel calls per client: 1
39+
Total calls: 1000000
40+
Total time: 52.76s
41+
Requests per second: 18953.81
42+
Fastest time for request: 0.05ms
43+
Average time per request: 0.10ms
44+
Slowest time for request: 2.58ms
45+
46+
Time:
47+
0.1% time for request: 0.07ms
48+
1% time for request: 0.07ms
49+
5% time for request: 0.08ms
50+
10% time for request: 0.08ms
51+
25% time for request: 0.09ms
52+
50% time for request: 0.10ms
53+
75% time for request: 0.11ms
54+
90% time for request: 0.13ms
55+
95% time for request: 0.14ms
56+
99% time for request: 0.18ms
57+
99.9% time for request: 0.26ms
58+
59+
Response:
60+
Total response body sizes: 11000000
61+
Average body size per response: 11.00 Byte
62+
Response rate per second: 208491.96 Byte/s (0.21 MByte/s)
63+
64+
Result:
65+
Response ok: 1000000 (100.00%)
66+
Errors: 0 (0.00%)
67+
68+
Summary:
69+
Clients: 3
70+
Parallel calls per client: 1
71+
Total calls: 1000000
72+
Total time: 33.63s
73+
Requests per second: 29731.32
74+
Fastest time for request: 0.05ms
75+
Average time per request: 0.10ms
76+
Slowest time for request: 17.55ms
77+
78+
Time:
79+
0.1% time for request: 0.06ms
80+
1% time for request: 0.07ms
81+
5% time for request: 0.07ms
82+
10% time for request: 0.08ms
83+
25% time for request: 0.09ms
84+
50% time for request: 0.10ms
85+
75% time for request: 0.11ms
86+
90% time for request: 0.12ms
87+
95% time for request: 0.14ms
88+
99% time for request: 0.18ms
89+
99.9% time for request: 0.37ms
90+
91+
Response:
92+
Total response body sizes: 11000000
93+
Average body size per response: 11.00 Byte
94+
Response rate per second: 327044.57 Byte/s (0.33 MByte/s)
95+
96+
Result:
97+
Response ok: 1000000 (100.00%)
98+
Errors: 0 (0.00%)
99+
100+
Summary:
101+
Clients: 4
102+
Parallel calls per client: 1
103+
Total calls: 1000000
104+
Total time: 26.22s
105+
Requests per second: 38132.78
106+
Fastest time for request: 0.05ms
107+
Average time per request: 0.10ms
108+
Slowest time for request: 5.64ms
109+
110+
Time:
111+
0.1% time for request: 0.06ms
112+
1% time for request: 0.07ms
113+
5% time for request: 0.07ms
114+
10% time for request: 0.08ms
115+
25% time for request: 0.09ms
116+
50% time for request: 0.10ms
117+
75% time for request: 0.11ms
118+
90% time for request: 0.13ms
119+
95% time for request: 0.15ms
120+
99% time for request: 0.20ms
121+
99.9% time for request: 0.48ms
122+
123+
Response:
124+
Total response body sizes: 11000000
125+
Average body size per response: 11.00 Byte
126+
Response rate per second: 419460.54 Byte/s (0.42 MByte/s)
127+
128+
Result:
129+
Response ok: 1000000 (100.00%)
130+
Errors: 0 (0.00%)
131+
132+
133+
```

fasthttp/server.go

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package main
2+
3+
import (
4+
"flag"
5+
"github.com/buaazp/fasthttprouter"
6+
"github.com/valyala/fasthttp"
7+
)
8+
9+
var addr string
10+
11+
func init() {
12+
flag.StringVar(&addr, "addr", ":8080", "-addr=:8080")
13+
flag.Parse()
14+
}
15+
16+
func main() {
17+
router := fasthttprouter.New()
18+
router.GET("/", func(ctx *fasthttp.RequestCtx) {
19+
ctx.Write([]byte("Hello World"))
20+
})
21+
fasthttp.ListenAndServe(addr, router.Handler)
22+
}

gin/README.md

+133
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,133 @@
1+
# gin
2+
3+
```
4+
Summary:
5+
Clients: 1
6+
Parallel calls per client: 1
7+
Total calls: 1000000
8+
Total time: 114.09s
9+
Requests per second: 8765.20
10+
Fastest time for request: 0.08ms
11+
Average time per request: 0.11ms
12+
Slowest time for request: 2.46ms
13+
14+
Time:
15+
0.1% time for request: 0.09ms
16+
1% time for request: 0.09ms
17+
5% time for request: 0.10ms
18+
10% time for request: 0.10ms
19+
25% time for request: 0.10ms
20+
50% time for request: 0.11ms
21+
75% time for request: 0.12ms
22+
90% time for request: 0.13ms
23+
95% time for request: 0.14ms
24+
99% time for request: 0.17ms
25+
99.9% time for request: 0.28ms
26+
27+
Response:
28+
Total response body sizes: 11000000
29+
Average body size per response: 11.00 Byte
30+
Response rate per second: 96417.22 Byte/s (0.10 MByte/s)
31+
32+
Result:
33+
Response ok: 1000000 (100.00%)
34+
Errors: 0 (0.00%)
35+
36+
Summary:
37+
Clients: 2
38+
Parallel calls per client: 1
39+
Total calls: 1000000
40+
Total time: 62.17s
41+
Requests per second: 16085.48
42+
Fastest time for request: 0.06ms
43+
Average time per request: 0.12ms
44+
Slowest time for request: 3.01ms
45+
46+
Time:
47+
0.1% time for request: 0.08ms
48+
1% time for request: 0.09ms
49+
5% time for request: 0.10ms
50+
10% time for request: 0.10ms
51+
25% time for request: 0.11ms
52+
50% time for request: 0.12ms
53+
75% time for request: 0.13ms
54+
90% time for request: 0.15ms
55+
95% time for request: 0.16ms
56+
99% time for request: 0.20ms
57+
99.9% time for request: 0.39ms
58+
59+
Response:
60+
Total response body sizes: 11000000
61+
Average body size per response: 11.00 Byte
62+
Response rate per second: 176940.27 Byte/s (0.18 MByte/s)
63+
64+
Result:
65+
Response ok: 1000000 (100.00%)
66+
Errors: 0 (0.00%)
67+
68+
Summary:
69+
Clients: 3
70+
Parallel calls per client: 1
71+
Total calls: 1000000
72+
Total time: 41.32s
73+
Requests per second: 24200.97
74+
Fastest time for request: 0.07ms
75+
Average time per request: 0.12ms
76+
Slowest time for request: 3.37ms
77+
78+
Time:
79+
0.1% time for request: 0.08ms
80+
1% time for request: 0.09ms
81+
5% time for request: 0.10ms
82+
10% time for request: 0.10ms
83+
25% time for request: 0.11ms
84+
50% time for request: 0.12ms
85+
75% time for request: 0.13ms
86+
90% time for request: 0.15ms
87+
95% time for request: 0.17ms
88+
99% time for request: 0.22ms
89+
99.9% time for request: 0.45ms
90+
91+
Response:
92+
Total response body sizes: 11000000
93+
Average body size per response: 11.00 Byte
94+
Response rate per second: 266210.62 Byte/s (0.27 MByte/s)
95+
96+
Result:
97+
Response ok: 1000000 (100.00%)
98+
Errors: 0 (0.00%)
99+
100+
Summary:
101+
Clients: 4
102+
Parallel calls per client: 1
103+
Total calls: 1000000
104+
Total time: 32.65s
105+
Requests per second: 30624.72
106+
Fastest time for request: 0.07ms
107+
Average time per request: 0.13ms
108+
Slowest time for request: 4.09ms
109+
110+
Time:
111+
0.1% time for request: 0.08ms
112+
1% time for request: 0.08ms
113+
5% time for request: 0.09ms
114+
10% time for request: 0.10ms
115+
25% time for request: 0.11ms
116+
50% time for request: 0.12ms
117+
75% time for request: 0.14ms
118+
90% time for request: 0.16ms
119+
95% time for request: 0.18ms
120+
99% time for request: 0.27ms
121+
99.9% time for request: 0.57ms
122+
123+
Response:
124+
Total response body sizes: 11000000
125+
Average body size per response: 11.00 Byte
126+
Response rate per second: 336871.89 Byte/s (0.34 MByte/s)
127+
128+
Result:
129+
Response ok: 1000000 (100.00%)
130+
Errors: 0 (0.00%)
131+
132+
133+
```

gin/server.go

+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package main
2+
3+
import (
4+
"flag"
5+
"github.com/gin-gonic/gin"
6+
"net/http"
7+
)
8+
9+
var addr string
10+
11+
func init() {
12+
flag.StringVar(&addr, "addr", ":8080", "-addr=:8080")
13+
flag.Parse()
14+
}
15+
16+
func main() {
17+
gin.Default()
18+
router := gin.New()
19+
router.GET("/", func(c *gin.Context) {
20+
c.String(http.StatusOK, "Hello world")
21+
})
22+
router.Run(addr)
23+
}

http-p99.png

21.9 KB
Loading

http-qps.png

25.2 KB
Loading

0 commit comments

Comments
 (0)