MCPcopy
hub / github.com/smallnest/1m-go-tcp-server / mkClient

Function mkClient

5_multiple_client/client.go:49–94  ·  view source on GitHub ↗
(addr string, connections int)

Source from the content-addressed store, hash-verified

47}
48
49func mkClient(addr string, connections int) {
50 epoller, err := MkEpoll()
51 if err != nil {
52 panic(err)
53 }
54
55 var conns []net.Conn
56 for i := 0; i < connections; i++ {
57 c, err := net.DialTimeout("tcp", addr, 10*time.Second)
58 if err != nil {
59 fmt.Println("failed to connect", i, err)
60 i--
61 continue
62 }
63 if err := epoller.Add(c); err != nil {
64 log.Printf("failed to add connection %v", err)
65 c.Close()
66 }
67 conns = append(conns, c)
68 }
69
70 log.Printf("完成初始化 %d 连接", len(conns))
71
72 go start(epoller)
73
74 tts := time.Second
75 if *c > 100 {
76 tts = time.Millisecond * 5
77 }
78
79 for i := 0; i < len(conns); i++ {
80 time.Sleep(tts)
81 conn := conns[i]
82 err = binary.Write(conn, binary.BigEndian, time.Now().UnixNano())
83 if err != nil {
84 log.Printf("failed to write timestamp %v", err)
85 if err := epoller.Remove(conn); err != nil {
86 if err := epoller.Remove(conn); err != nil {
87 log.Printf("failed to remove %v", err)
88 }
89 }
90 }
91 }
92
93 select {}
94}
95
96func start(epoller *epoll) {
97 var nano int64

Callers 1

mainFunction · 0.85

Calls 5

CloseMethod · 0.80
MkEpollFunction · 0.70
startFunction · 0.70
AddMethod · 0.45
RemoveMethod · 0.45

Tested by

no test coverage detected