You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
109 lines
2.6 KiB
109 lines
2.6 KiB
package main |
|
|
|
import ( |
|
"context" |
|
"flag" |
|
"fmt" |
|
"net" |
|
"net/http" |
|
_ "net/http/pprof" |
|
"os" |
|
"sync/atomic" |
|
"time" |
|
|
|
"go-common/library/log" |
|
xtime "go-common/library/time" |
|
) |
|
|
|
var isClient bool |
|
|
|
func init() { |
|
os.Setenv("LOG_AGENT", "tcp://127.0.0.1:8080") |
|
flag.BoolVar(&isClient, "c", false, "-c=true") |
|
} |
|
|
|
func main() { |
|
|
|
flag.Parse() |
|
if isClient { |
|
go func() { |
|
fmt.Println(http.ListenAndServe("localhost:6060", nil)) |
|
}() |
|
log.Init(&log.Config{ |
|
Stdout: false, |
|
Agent: &log.AgentConfig{ |
|
Proto: "tcp", |
|
Addr: "127.0.0.1:8080", |
|
Chan: 2048, |
|
Buffer: 1, |
|
Timeout: xtime.Duration(time.Second), |
|
}}) |
|
for i := 0; i < 3; i++ { |
|
go func() { |
|
arg := `area:"reply" |
|
message:"\345\233\236\345\244\215 @\347\231\276\350\215\211\345\221\263\346\235\245\344\274\212\344\273\275 :\345\223\210\357\274\214\344\275\240\345\260\261\345\217\252\347\234\213\345\210\260\344\272\206pick me up\346\262\241\347\234\213\345\210\260\346\222\236\357\274\237\347\262\211\344\270\235\350\247\243\351\207\212\344\272\206\346\227\240\346\225\260\351\201\215\344\273\245\345\211\215\351\202\243\344\270\252\345\245\263\345\233\242\344\270\200\344\270\252\346\234\210\345\260\261\346\262\241\345\255\246\345\225\245\350\210\236\357\274\214\347\277\273\346\235\245\350\246\206\345\216\273\350\267\263\357\274\214\345\217\202\345\212\240101\347\232\204\346\227\266\345\200\2313\345\244\251\344\270\200\344\270\252\350\210\236\350\277\230\345\234\250\350\277\231\350\257\264\343\200\202\346\234\215\344\272\206" |
|
id:1075824609 oid:31813039 mid:76839481 ` |
|
for { |
|
log.Infov(context.Background(), |
|
log.KV("user", "test_user"), |
|
log.KV("ip", "127.0.0.1:8080"), |
|
log.KV("path", "127.0.0.1:8080/test_user"), |
|
log.KV("ret", 0), |
|
log.KV("args", arg), |
|
log.KV("stack", "nil"), |
|
log.KV("error", ""), |
|
log.KV("ts", time.Second.Seconds()), |
|
) |
|
} |
|
}() |
|
} |
|
time.Sleep(time.Hour) |
|
} else { |
|
startServer() |
|
} |
|
} |
|
|
|
func startServer() { |
|
go calcuQPS() |
|
lis, err := net.Listen("tcp", ":8080") |
|
if err != nil { |
|
panic(err) |
|
} |
|
for { |
|
conn, err := lis.Accept() |
|
if err != nil { |
|
return |
|
} |
|
go serve(conn) |
|
} |
|
} |
|
|
|
var total int64 |
|
|
|
func calcuQPS() { |
|
var lastTotal int64 |
|
var lastUpdated time.Time |
|
for { |
|
time.Sleep(time.Second * 3) |
|
t := atomic.LoadInt64(&total) |
|
n := time.Now() |
|
change := t - lastTotal |
|
gap := n.Sub(lastUpdated) |
|
fmt.Println("bw:", change/(gap.Nanoseconds()/1e7)) |
|
lastTotal = t |
|
lastUpdated = n |
|
} |
|
} |
|
|
|
func serve(conn net.Conn) { |
|
p := make([]byte, 4096) |
|
for { |
|
nRead, err := conn.Read(p) |
|
if err != nil { |
|
conn.Close() |
|
break |
|
} |
|
atomic.AddInt64(&total, int64(nRead)) |
|
} |
|
fmt.Println(string(p)) |
|
}
|
|
|