-
Notifications
You must be signed in to change notification settings - Fork 0
/
client.go
executable file
·70 lines (64 loc) · 1.66 KB
/
client.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
package main
import (
"context"
"flag"
"fmt"
"github.com/hslam/rpc-benchmark/grpc/service"
"github.com/hslam/stats"
"google.golang.org/grpc"
"log"
"math/rand"
)
var network string
var addr string
var codec string
var clients int
var total int
var parallel int
var bar bool
func init() {
flag.StringVar(&network, "network", "tcp", "-network=tcp")
flag.StringVar(&addr, "addr", ":9999", "-addr=:9999")
flag.StringVar(&codec, "codec", "pb", "-codec=code")
flag.IntVar(&total, "total", 100000, "-total=100000")
flag.IntVar(¶llel, "parallel", 1, "-parallel=1")
flag.IntVar(&clients, "clients", 1, "-clients=1")
flag.BoolVar(&bar, "bar", true, "-bar=true")
flag.Parse()
stats.SetBar(bar)
fmt.Printf("./client -network=%s -addr=%s -total=%d -parallel=%d -clients=%d\n", network, addr, total, parallel, clients)
}
func main() {
if clients < 1 || parallel < 1 || total < 1 {
return
}
var wrkClients []stats.Client
for i := 0; i < clients; i++ {
if conn, err := grpc.Dial(addr, grpc.WithInsecure()); err != nil {
log.Fatalln("dailing error: ", err)
} else {
wrkClients = append(wrkClients, &WrkClient{conn})
}
}
stats.StartPrint(parallel, total, wrkClients)
}
type WrkClient struct {
*grpc.ClientConn
}
func (c *WrkClient) Call() (int64, int64, bool) {
A := rand.Int31n(100)
B := rand.Int31n(100)
req := &service.ArithRequest{A: A, B: B}
var res *service.ArithResponse
client := service.NewArithServiceClient(c.ClientConn)
res, err := client.Multiply(context.Background(), req)
if err != nil {
fmt.Println(err)
return 0, 0, false
}
if res.Pro == A*B {
return 0, 0, true
}
fmt.Printf("err %d * %d = %d\n", A, B, res.Pro)
return 0, 0, false
}