Skip to content

Commit

Permalink
combine code
Browse files Browse the repository at this point in the history
  • Loading branch information
huzhao37 committed Jul 9, 2020
1 parent bf64a8d commit 1f8abe7
Show file tree
Hide file tree
Showing 13 changed files with 177 additions and 188 deletions.
66 changes: 33 additions & 33 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,123 +12,123 @@ git clone https://gitee.com/gbat/goperf.git
cd goperf
# Build benchmark tools
cd receiver
go build
cd cmd
go build -o goperf
cd send
go build
~~~


## 吞吐量测试

### receiver
### server
~~~
recerver -ip=127.0.0.1 -port=10001 -k=false -test=1 -b=500
goperf -s -ip=127.0.0.1 -port=10001 -io -b=500
s:开启服务端
ip:tcp服务端绑定的IP
port:tcp服务端绑定的端口号
k:开启长连接,默认开启
k:开启长连接,默认关闭
b:每次发送数据大小,默认500,单位:B
test:0-并发测试,1-吞吐量测试
io:默认-并发测试,io-吞吐量测试
~~~

### send
### client

####直连
~~~
send -ip=127.0.0.1 -port=10000 -k=false -test=1 -b=500 -amount=1 -concurrency=1 -type=direct -destips=127.0.0.1 -destport=10001
goperf -ip=127.0.0.1 -port=10000 -io -b=500 -amount=1 -concurrency=1 -destips=127.0.0.1 -destport=10001
ip:tcp客户端绑定的IP
port:tcp客户端绑定的端口号
k:开启长连接,默认开启
k:开启长连接,默认关闭
b:每次发送数据大小,默认500,单位:B
test:0-并发测试,1-吞吐量测试
io:默认-并发测试,io-吞吐量测试
amount:测试发送的数据总量,单位GB
concurrency:并发数
type:连接类型 direct-直连,socks-socks5代理
socks:连接类型 默认-直连,socks-socks5代理
destips:目标ip,即目标tcp服务端ip地址集合,可为多个tcp节点,以","分割
destport:目标端口号:即目标tcp服务端端口号
~~~

####代理
~~~
send -ip=127.0.0.1 -port=10000 -k=false -test=1 -b=500 -amount=1 -concurrency=1 -type=socks -destips=127.0.0.1 -destport=10001 -proxyip=127.0.0.1 -proxyports=11000,12000 -porttype=1
goperf -ip=127.0.0.1 -port=10000 -io -b=500 -amount=1 -concurrency=1 -socks -destips=127.0.0.1 -destport=10001 -proxyip=127.0.0.1 -proxyports=11000,12000 -multiport
-user=admin -pwd=123456
ip:tcp客户端绑定的IP
port:tcp客户端绑定的端口号
k:开启长连接,默认开启
k:开启长连接,默认关闭
b:每次发送数据大小,默认500,单位:B
test:0-并发测试,1-吞吐量测试
io:默认-并发测试,io-吞吐量测试
amount:测试发送的数据总量,单位GB
concurrency:并发数
type:连接类型 direct-直连,socks-socks5代理
socks:连接类型 默认-直连,socks-socks5代理
destips:目标ip,即目标tcp服务端ip地址集合,可为多个tcp节点,以","分割
destport:目标端口号:即目标tcp服务端端口号
proxyip:socks5代理ip地址
proxyports:socks5代理端口号,可以开启多个端口号转发,以","分割
porttype:socks5代理端口号类型,0-单端口,1-多端口
multiport:socks5代理端口号类型,默认-单端口,multiport-多端口
user:socks5代理用户名
pwd:socks5代理密码
~~~

## 并发测试

### receiver
### server
~~~
recerver -ip=127.0.0.1 -port=10001 -k=false -test=0 -b=500
goperf -s -ip=127.0.0.1 -port=10001 -b=500
s:开启服务端
ip:tcp服务端绑定的IP
port:tcp服务端绑定的端口号
k:开启长连接,默认开启
k:开启长连接,默认关闭
b:每次发送数据大小,默认500,单位:B
test:0-并发测试,1-吞吐量测试
io:默认-并发测试,io-吞吐量测试
~~~
### send
### client

####直连
~~~
send -ip=127.0.0.1 -port=10000 -k=false -test=0 -b=500 -amount=1 -concurrency=100 -type=direct -destips=127.0.0.1 -destport=10001
goperf -ip=127.0.0.1 -port=10000 -b=500 -amount=1 -concurrency=100 -destips=127.0.0.1 -destport=10001
ip:tcp客户端绑定的IP
port:tcp客户端绑定的端口号
k:开启长连接,默认开启
k:开启长连接,默认关闭
b:每次发送数据大小,默认500,单位:B
test:0-并发测试,1-吞吐量测试
io:默认-并发测试,io-吞吐量测试
amount:测试发送的数据总量,单位GB
concurrency:并发数
type:连接类型 direct-直连,socks-socks5代理
socks:连接类型 默认-直连,socks-socks5代理
destips:目标ip,即目标tcp服务端ip地址集合,可为多个tcp节点,以","分割
destport:目标端口号:即目标tcp服务端端口号
~~~

####代理
~~~
send -ip=127.0.0.1 -port=10000 -k=false -test=0 -b=500 -amount=1 -concurrency=100 -type=socks -destips=127.0.0.1 -destport=10001 -proxyip=127.0.0.1 -proxyports=11000,12000 -porttype=1
goperf -ip=127.0.0.1 -port=10000 -b=500 -amount=1 -concurrency=100 -socks -destips=127.0.0.1 -destport=10001 -proxyip=127.0.0.1 -proxyports=11000,12000 -multiport
-user=admin -pwd=123456
ip:tcp客户端绑定的IP
port:tcp客户端绑定的端口号
k:开启长连接,默认开启
k:开启长连接,默认关闭
b:每次发送数据大小,默认500,单位:B
test:0-并发测试,1-吞吐量测试
io:默认-并发测试,io-吞吐量测试
amount:测试发送的数据总量,单位GB
concurrency:并发数
type:连接类型 direct-直连,socks-socks5代理
socks:连接类型 默认-直连,socks-socks5代理
destips:目标ip,即目标tcp服务端ip地址集合,可为多个tcp节点,以","分割
destport:目标端口号:即目标tcp服务端端口号
proxyip:socks5代理ip地址
proxyports:socks5代理端口号,可以开启多个端口号转发,以","分割
porttype:socks5代理端口号类型,0-单端口,1-多端口
multiport:socks5代理端口号类型,默认-单端口,multiport-多端口
user:socks5代理用户名
pwd:socks5代理密码
~~~
###注意
test=1,即测试吞吐量时,concurrency尽量不要太大,默认值即可
-io,即测试吞吐量时,concurrency尽量不要太大,默认值即可

###效果
![并发测试](https://images.gitee.com/uploads/images/2020/0708/175505_9c1b6167_671199.png "concurrency.png")
Expand Down
4 changes: 1 addition & 3 deletions build/build_linux.bat
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,7 @@ SET GOOS=linux

SET GOARCH=amd64

go build -o ../build/receiver ../receiver/main.go

go build -o ../build/send ../send/main.go
go build -o ../build/goperf ../cmd/main.go


pausego
4 changes: 1 addition & 3 deletions build/build_windows.bat
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,7 @@ SET GOOS=windows

SET GOARCH=amd64

go build -o ../build/receiver.exe ../receiver/main.go

go build -o ../build/send.exe ../send/main.go
go build -o ../build/goperf.exe ../cmd/main.go


pause
Binary file added build/goperf
Binary file not shown.
Binary file added build/goperf.exe
Binary file not shown.
Binary file removed build/receiver
Binary file not shown.
Binary file removed build/receiver.exe
Binary file not shown.
Binary file removed build/send
Binary file not shown.
Binary file removed build/send.exe
Binary file not shown.
41 changes: 41 additions & 0 deletions cmd/main.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
/**
* @Author: hiram
* @Date: 2020/7/9 9:20
*/
package main

import (
"flag"
"fmt"
"gitee.com/gbat/goperf"
"os"
"os/signal"
"syscall"
)

var (
server = flag.Bool("s", false, "default:start on tcp client ,select true for start on tcp server.")
)

func main() {
flag.Parse()
if *server {
goperf.Server()
} else {
goperf.Client()
}

sigs := make(chan os.Signal, 1)
done := make(chan bool, 1)
signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)

go func() {
sig := <-sigs
fmt.Println()
fmt.Println(sig)
done <- true
}()
fmt.Println("awaiting signal")
<-done
fmt.Println("exiting")
}
64 changes: 64 additions & 0 deletions receiver.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
package goperf

import (
"encoding/binary"
"flag"
"fmt"
"net"
)

var (
flocalPort = flag.Int("port", 10001, "Port to listen on.")
flocalIp = flag.String("ip", "127.0.0.1", "IP to listen on.")
keepAlive = flag.Bool("k", false, "is keep alive")
testType = flag.Bool("io", false, "test type,either 'concurrency' or 'IOPS'.")
buffer = flag.Int64("b", 500, "send bytes,unit: B.")
)

func receive(conn net.Conn) {
if !*keepAlive {
defer conn.Close()
}
size := int64(256 * 1024)
if !*testType {
size = *buffer
}
if *testType {
size = 256 * 1024
}
buf := make([]byte, size)
var total uint64
for {
n, err := conn.Read(buf)
total += uint64(n)
if err != nil {
fmt.Println("Connection finishes with", total, "bytes:", err)
return
}
if err := binary.Write(conn, binary.BigEndian, total); err != nil {
panic(err)
}
}
}

func accept(listener net.Listener) {
for {
conn, err := listener.Accept()
if err != nil {
fmt.Println(err)
break
}
go receive(conn)
}
}

func Server() {
listener, err := net.ListenTCP("tcp4", &net.TCPAddr{
IP: net.ParseIP(*flocalIp),
Port: *flocalPort,
})
if err != nil {
panic(err)
}
go accept(listener)
}
83 changes: 0 additions & 83 deletions receiver/main.go

This file was deleted.

Loading

0 comments on commit 1f8abe7

Please sign in to comment.