Skip to content

Commit b11aafd

Browse files
committed
add client connect timeout func
1 parent 7182a32 commit b11aafd

File tree

2 files changed

+146
-144
lines changed

2 files changed

+146
-144
lines changed

README.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -287,9 +287,10 @@ for example: ```example/pressure-client```
287287
288288
client := tcpclient.New(appHdl, cnf)
289289
290-
err = client.ConnectToServer(serverIP, serverPort)
290+
cnct_to := 3 * time.Second
291+
err = client.ConnectToServer_Timeout(serverIP, serverPort, cnct_to)
291292
if nil != err {
292-
log.Panicln("ConnectToServer failed", err)
293+
log.Panicln("ConnectToServer_Timeout failed", err)
293294
}
294295
295296
// send

example/pressure-client/main.go

Lines changed: 143 additions & 142 deletions
Original file line numberDiff line numberDiff line change
@@ -1,183 +1,184 @@
11
package main
22

33
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"
1212
)
1313

1414
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"
1919
)
2020

2121
var (
22-
gPprofPort uint
23-
gRemoteIP string
24-
gRemotePort uint
22+
gPprofPort uint
23+
gRemoteIP string
24+
gRemotePort uint
2525

26-
gClientNums int
27-
gSendRate int
28-
gDataSize string
26+
gClientNums int
27+
gSendRate int
28+
gDataSize string
2929

30-
gChExit chan int
31-
gTotalReceivedPkg uint64
32-
gTotalSendedPkg uint64
30+
gChExit chan int
31+
gTotalReceivedPkg uint64
32+
gTotalSendedPkg uint64
3333
)
3434

3535
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")
3939

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")
4242

43-
flag.StringVar(&gDataSize, "data-size", "1k", "send data size")
43+
flag.StringVar(&gDataSize, "data-size", "1k", "send data size")
4444

45-
gChExit = make(chan int)
45+
gChExit = make(chan int)
4646
}
4747

4848
func main() {
4949

50-
runtime.GOMAXPROCS(200)
51-
log.Println("runtime.GOMAXPROCS", 200)
50+
runtime.GOMAXPROCS(200)
51+
log.Println("runtime.GOMAXPROCS", 200)
5252

53-
var err error
53+
var err error
5454

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+
}
6060

61-
for i := 0; i < gClientNums; i++ {
62-
go coPressureSender()
63-
}
61+
for i := 0; i < gClientNums; i++ {
62+
go coPressureSender()
63+
}
6464

65-
sysMonitor()
65+
sysMonitor()
6666
}
6767

6868
func sysMonitor() {
6969

70-
var (
71-
timeout = 10 * time.Second
70+
var (
71+
timeout = 10 * time.Second
7272

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+
)
7878

79-
for {
80-
select {
81-
case <-gChExit:
79+
for {
80+
select {
81+
case <-gChExit:
8282

83-
case <-time.After(timeout):
84-
nowTotalReceivedPkg = gTotalReceivedPkg
85-
nowTotalSendedPkg = gTotalSendedPkg
83+
case <-time.After(timeout):
84+
nowTotalReceivedPkg = gTotalReceivedPkg
85+
nowTotalSendedPkg = gTotalSendedPkg
8686

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)
9090

91-
lastTotalReceivedPkg = nowTotalReceivedPkg
92-
lastTotalSendedPkg = nowTotalSendedPkg
93-
}
94-
}
91+
lastTotalReceivedPkg = nowTotalReceivedPkg
92+
lastTotalSendedPkg = nowTotalSendedPkg
93+
}
94+
}
9595
}
9696

9797
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+
}
145146
}
146147

147148
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
183184
}

0 commit comments

Comments
 (0)