Skip to content

Commit 2957b3b

Browse files
committed
add multiple-epoller client
1 parent 63cacc6 commit 2957b3b

File tree

11 files changed

+37
-2
lines changed

11 files changed

+37
-2
lines changed

4_epoll_client/build.sh

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
#!/bin/bash
2+
3+
go build --tags "static netgo" -o client .

4_epoll_client/epoll_linux.go

100755100644
File mode changed.

4_epoll_client/epoll_other.go

100755100644
File mode changed.

5_multiple_client/build.sh

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
#!/bin/bash
2+
3+
go build --tags "static netgo" -o mclient .

5_multiple_client/client.go

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,10 +72,23 @@ func mkClient(addr string, connections int) {
7272

7373
go start(epoller)
7474

75+
tts := time.Second
76+
if *c > 100 {
77+
tts = time.Millisecond * 5
78+
}
79+
7580
for i := 0; i < len(conns); i++ {
81+
time.Sleep(tts)
7682
conn := conns[i]
77-
conn.Write([]byte("hello world\r\n"))
83+
err = binary.Write(conn, binary.BigEndian, time.Now().UnixNano())
84+
if err := epoller.Remove(conn); err != nil {
85+
log.Printf("failed to write timestamp %v", err)
86+
if err := epoller.Remove(conn); err != nil {
87+
log.Printf("failed to remove %v", err)
88+
}
89+
}
7890
}
91+
7992
}
8093

8194
func start(epoller *epoll) {
@@ -99,7 +112,7 @@ func start(epoller *epoll) {
99112
opsRate.Update(time.Duration(time.Now().UnixNano() - nano))
100113
}
101114

102-
err = binary.Write(conn, binary.BigEndian, []byte("hello world\r\n"))
115+
err = binary.Write(conn, binary.BigEndian, time.Now().UnixNano())
103116
if err != nil {
104117
if err := epoller.Remove(conn); err != nil {
105118
log.Printf("failed to remove %v", err)

destroy.sh

100644100755
File mode changed.

pprof_goroutine.sh

100644100755
File mode changed.

pprof_heap.sh

100644100755
File mode changed.

report.sh

100644100755
File mode changed.

setup.sh

100644100755
File mode changed.

setupm.sh

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
#!/bin/bash
2+
## 这个脚本使用Docker在不同的网络命名空间产生多个client实例.
3+
## 这样才能避免source port的限制,在一台机器上才能创建百万的连接.
4+
##
5+
## 用法: ./connect <connections> <number of clients> <server ip>
6+
## Server IP 通常是 Docker gateway IP address, 缺省是 172.17.0.1
7+
8+
CONNECTIONS=$1
9+
REPLICAS=$2
10+
IP=$3
11+
CONCURRENCY=$4
12+
13+
for (( c=0; c<${REPLICAS}; c++ ))
14+
do
15+
docker run -v $(pwd)/mclient:/client --name 1mclient_$c -d frolvlad/alpine-glibc /client -conn=${CONNECTIONS} -ip=${IP} -c=${CONCURRENCY}
16+
done

0 commit comments

Comments
 (0)