|
1 | 1 | package main |
2 | 2 |
|
3 | 3 | import ( |
4 | | - "flag" |
5 | | - "log" |
6 | | - "runtime" |
7 | | - "strings" |
8 | | - "time" |
9 | | - |
10 | | - "github.com/chenjunpc2008/go-tcp/tcpclient" |
11 | | - "github.com/chenjunpc2008/go/util/onlinepprof" |
| 4 | + "flag" |
| 5 | + "log" |
| 6 | + "runtime" |
| 7 | + "strings" |
| 8 | + "time" |
| 9 | + |
| 10 | + "github.com/chenjunpc2008/go-tcp/tcpclient" |
| 11 | + "github.com/chenjunpc2008/go/util/onlinepprof" |
12 | 12 | ) |
13 | 13 |
|
14 | 14 | const ( |
15 | | - dataSize1k = "1k" |
16 | | - dataSize2k = "2k" |
17 | | - dataSize3k = "3k" |
18 | | - dataSize4k = "4k" |
| 15 | + dataSize1k = "1k" |
| 16 | + dataSize2k = "2k" |
| 17 | + dataSize3k = "3k" |
| 18 | + dataSize4k = "4k" |
19 | 19 | ) |
20 | 20 |
|
21 | 21 | var ( |
22 | | - gPprofPort uint |
23 | | - gRemoteIP string |
24 | | - gRemotePort uint |
| 22 | + gPprofPort uint |
| 23 | + gRemoteIP string |
| 24 | + gRemotePort uint |
25 | 25 |
|
26 | | - gClientNums int |
27 | | - gSendRate int |
28 | | - gDataSize string |
| 26 | + gClientNums int |
| 27 | + gSendRate int |
| 28 | + gDataSize string |
29 | 29 |
|
30 | | - gChExit chan int |
31 | | - gTotalReceivedPkg uint64 |
32 | | - gTotalSendedPkg uint64 |
| 30 | + gChExit chan int |
| 31 | + gTotalReceivedPkg uint64 |
| 32 | + gTotalSendedPkg uint64 |
33 | 33 | ) |
34 | 34 |
|
35 | 35 | func init() { |
36 | | - flag.UintVar(&gPprofPort, "pprof-port", 10012, "net pprof listen port") |
37 | | - flag.StringVar(&gRemoteIP, "rip", "127.0.0.1", "remote server ip") |
38 | | - flag.UintVar(&gRemotePort, "rport", 8019, "remote server port") |
| 36 | + flag.UintVar(&gPprofPort, "pprof-port", 10012, "net pprof listen port") |
| 37 | + flag.StringVar(&gRemoteIP, "rip", "127.0.0.1", "remote server ip") |
| 38 | + flag.UintVar(&gRemotePort, "rport", 8019, "remote server port") |
39 | 39 |
|
40 | | - flag.IntVar(&gClientNums, "clients", 100, "number of clients") |
41 | | - flag.IntVar(&gSendRate, "send-rate", 1000, "send rate per client per second") |
| 40 | + flag.IntVar(&gClientNums, "clients", 100, "number of clients") |
| 41 | + flag.IntVar(&gSendRate, "send-rate", 1000, "send rate per client per second") |
42 | 42 |
|
43 | | - flag.StringVar(&gDataSize, "data-size", "1k", "send data size") |
| 43 | + flag.StringVar(&gDataSize, "data-size", "1k", "send data size") |
44 | 44 |
|
45 | | - gChExit = make(chan int) |
| 45 | + gChExit = make(chan int) |
46 | 46 | } |
47 | 47 |
|
48 | 48 | func main() { |
49 | 49 |
|
50 | | - runtime.GOMAXPROCS(200) |
51 | | - log.Println("runtime.GOMAXPROCS", 200) |
| 50 | + runtime.GOMAXPROCS(200) |
| 51 | + log.Println("runtime.GOMAXPROCS", 200) |
52 | 52 |
|
53 | | - var err error |
| 53 | + var err error |
54 | 54 |
|
55 | | - // pprof |
56 | | - _, err = onlinepprof.StartOnlinePprof(true, uint16(gPprofPort), true) |
57 | | - if nil != err { |
58 | | - log.Panicln("StartServer failed", err) |
59 | | - } |
| 55 | + // pprof |
| 56 | + _, err = onlinepprof.StartOnlinePprof(true, uint16(gPprofPort), true) |
| 57 | + if nil != err { |
| 58 | + log.Panicln("StartServer failed", err) |
| 59 | + } |
60 | 60 |
|
61 | | - for i := 0; i < gClientNums; i++ { |
62 | | - go coPressureSender() |
63 | | - } |
| 61 | + for i := 0; i < gClientNums; i++ { |
| 62 | + go coPressureSender() |
| 63 | + } |
64 | 64 |
|
65 | | - sysMonitor() |
| 65 | + sysMonitor() |
66 | 66 | } |
67 | 67 |
|
68 | 68 | func sysMonitor() { |
69 | 69 |
|
70 | | - var ( |
71 | | - timeout = 10 * time.Second |
| 70 | + var ( |
| 71 | + timeout = 10 * time.Second |
72 | 72 |
|
73 | | - lastTotalReceivedPkg uint64 |
74 | | - lastTotalSendedPkg uint64 |
75 | | - nowTotalReceivedPkg uint64 |
76 | | - nowTotalSendedPkg uint64 |
77 | | - ) |
| 73 | + lastTotalReceivedPkg uint64 |
| 74 | + lastTotalSendedPkg uint64 |
| 75 | + nowTotalReceivedPkg uint64 |
| 76 | + nowTotalSendedPkg uint64 |
| 77 | + ) |
78 | 78 |
|
79 | | - for { |
80 | | - select { |
81 | | - case <-gChExit: |
| 79 | + for { |
| 80 | + select { |
| 81 | + case <-gChExit: |
82 | 82 |
|
83 | | - case <-time.After(timeout): |
84 | | - nowTotalReceivedPkg = gTotalReceivedPkg |
85 | | - nowTotalSendedPkg = gTotalSendedPkg |
| 83 | + case <-time.After(timeout): |
| 84 | + nowTotalReceivedPkg = gTotalReceivedPkg |
| 85 | + nowTotalSendedPkg = gTotalSendedPkg |
86 | 86 |
|
87 | | - log.Printf("\n TotalReceivedPkg:%d, tps:[%d],\n TotalSendedPkg:%d, tps:[%d]\n", |
88 | | - nowTotalReceivedPkg, (nowTotalReceivedPkg-lastTotalReceivedPkg)/10, |
89 | | - nowTotalSendedPkg, (nowTotalSendedPkg-lastTotalSendedPkg)/10) |
| 87 | + log.Printf("\n TotalReceivedPkg:%d, tps:[%d],\n TotalSendedPkg:%d, tps:[%d]\n", |
| 88 | + nowTotalReceivedPkg, (nowTotalReceivedPkg-lastTotalReceivedPkg)/10, |
| 89 | + nowTotalSendedPkg, (nowTotalSendedPkg-lastTotalSendedPkg)/10) |
90 | 90 |
|
91 | | - lastTotalReceivedPkg = nowTotalReceivedPkg |
92 | | - lastTotalSendedPkg = nowTotalSendedPkg |
93 | | - } |
94 | | - } |
| 91 | + lastTotalReceivedPkg = nowTotalReceivedPkg |
| 92 | + lastTotalSendedPkg = nowTotalSendedPkg |
| 93 | + } |
| 94 | + } |
95 | 95 | } |
96 | 96 |
|
97 | 97 | func coPressureSender() { |
98 | | - const ftag = "coPressureSender()" |
99 | | - |
100 | | - time.Sleep(2 * time.Second) |
101 | | - |
102 | | - var ( |
103 | | - timeout = time.Duration(1) * time.Second |
104 | | - msg string |
105 | | - err error |
106 | | - busy bool |
107 | | - ) |
108 | | - |
109 | | - appHdl := &appHandler{} |
110 | | - cnf := tcpclient.DefaultConfig() |
111 | | - |
112 | | - client := tcpclient.New(appHdl, cnf) |
113 | | - |
114 | | - err = client.ConnectToServer(gRemoteIP, uint16(gRemotePort)) |
115 | | - if nil != err { |
116 | | - log.Panicln("ConnectToServer failed", err) |
117 | | - } |
118 | | - |
119 | | - for { |
120 | | - select { |
121 | | - case <-gChExit: |
122 | | - // exit |
123 | | - return |
124 | | - |
125 | | - case <-time.After(timeout): |
126 | | - // sleep gap |
127 | | - } |
128 | | - |
129 | | - // |
130 | | - for i := 0; i < gSendRate; i++ { |
131 | | - msg = prepareData(gDataSize) |
132 | | - |
133 | | - busy, err = client.SendToServer(msg) |
134 | | - if nil != err { |
135 | | - log.Println("SendToServer failed", err) |
136 | | - break |
137 | | - } |
138 | | - |
139 | | - if busy { |
140 | | - log.Println("SendToServer failed because busy") |
141 | | - break |
142 | | - } |
143 | | - } |
144 | | - } |
| 98 | + const ftag = "coPressureSender()" |
| 99 | + |
| 100 | + time.Sleep(2 * time.Second) |
| 101 | + |
| 102 | + var ( |
| 103 | + timeout = time.Duration(1) * time.Second |
| 104 | + msg string |
| 105 | + err error |
| 106 | + busy bool |
| 107 | + ) |
| 108 | + |
| 109 | + appHdl := &appHandler{} |
| 110 | + cnf := tcpclient.DefaultConfig() |
| 111 | + |
| 112 | + client := tcpclient.New(appHdl, cnf) |
| 113 | + |
| 114 | + cnct_to := 3 * time.Second |
| 115 | + err = client.ConnectToServer_Timeout(gRemoteIP, uint16(gRemotePort), cnct_to) |
| 116 | + if nil != err { |
| 117 | + log.Panicln("ConnectToServer_Timeout failed", err) |
| 118 | + } |
| 119 | + |
| 120 | + for { |
| 121 | + select { |
| 122 | + case <-gChExit: |
| 123 | + // exit |
| 124 | + return |
| 125 | + |
| 126 | + case <-time.After(timeout): |
| 127 | + // sleep gap |
| 128 | + } |
| 129 | + |
| 130 | + // |
| 131 | + for i := 0; i < gSendRate; i++ { |
| 132 | + msg = prepareData(gDataSize) |
| 133 | + |
| 134 | + busy, err = client.SendToServer(msg) |
| 135 | + if nil != err { |
| 136 | + log.Println("SendToServer failed", err) |
| 137 | + break |
| 138 | + } |
| 139 | + |
| 140 | + if busy { |
| 141 | + log.Println("SendToServer failed because busy") |
| 142 | + break |
| 143 | + } |
| 144 | + } |
| 145 | + } |
145 | 146 | } |
146 | 147 |
|
147 | 148 | func prepareData(dataSize string) string { |
148 | | - var ( |
149 | | - buff strings.Builder |
150 | | - msg string |
151 | | - ) |
152 | | - |
153 | | - switch dataSize { |
154 | | - case dataSize1k: |
155 | | - for i := 0; i < 100; i++ { |
156 | | - buff.WriteString("1234567890") |
157 | | - } |
158 | | - |
159 | | - case dataSize2k: |
160 | | - for i := 0; i < 203; i++ { |
161 | | - buff.WriteString("1234567890") |
162 | | - } |
163 | | - |
164 | | - case dataSize3k: |
165 | | - for i := 0; i < 306; i++ { |
166 | | - buff.WriteString("1234567890") |
167 | | - } |
168 | | - |
169 | | - case dataSize4k: |
170 | | - for i := 0; i < 408; i++ { |
171 | | - buff.WriteString("1234567890") |
172 | | - } |
173 | | - |
174 | | - default: |
175 | | - // 1k |
176 | | - for i := 0; i < 100; i++ { |
177 | | - buff.WriteString("1234567890") |
178 | | - } |
179 | | - } |
180 | | - |
181 | | - msg = buff.String() |
182 | | - return msg |
| 149 | + var ( |
| 150 | + buff strings.Builder |
| 151 | + msg string |
| 152 | + ) |
| 153 | + |
| 154 | + switch dataSize { |
| 155 | + case dataSize1k: |
| 156 | + for i := 0; i < 100; i++ { |
| 157 | + buff.WriteString("1234567890") |
| 158 | + } |
| 159 | + |
| 160 | + case dataSize2k: |
| 161 | + for i := 0; i < 203; i++ { |
| 162 | + buff.WriteString("1234567890") |
| 163 | + } |
| 164 | + |
| 165 | + case dataSize3k: |
| 166 | + for i := 0; i < 306; i++ { |
| 167 | + buff.WriteString("1234567890") |
| 168 | + } |
| 169 | + |
| 170 | + case dataSize4k: |
| 171 | + for i := 0; i < 408; i++ { |
| 172 | + buff.WriteString("1234567890") |
| 173 | + } |
| 174 | + |
| 175 | + default: |
| 176 | + // 1k |
| 177 | + for i := 0; i < 100; i++ { |
| 178 | + buff.WriteString("1234567890") |
| 179 | + } |
| 180 | + } |
| 181 | + |
| 182 | + msg = buff.String() |
| 183 | + return msg |
183 | 184 | } |
0 commit comments