@@ -4,9 +4,12 @@ import (
4
4
"net"
5
5
"net/http"
6
6
"sync"
7
+ "time"
7
8
9
+ "github.com/Ehco1996/ehco/internal/constant"
8
10
"github.com/Ehco1996/ehco/internal/lb"
9
11
"github.com/Ehco1996/ehco/internal/logger"
12
+ "github.com/Ehco1996/ehco/internal/web"
10
13
"github.com/gobwas/ws"
11
14
)
12
15
@@ -28,6 +31,8 @@ func (raw *Raw) GetOrCreateBufferCh(uaddr *net.UDPAddr) *BufferCh {
28
31
}
29
32
30
33
func (raw * Raw ) HandleUDPConn (uaddr * net.UDPAddr , local * net.UDPConn ) {
34
+ web .CurUDPNum .Inc ()
35
+ defer web .CurUDPNum .Dec ()
31
36
32
37
bc := raw .GetOrCreateBufferCh (uaddr )
33
38
node := raw .UDPNodes .PickMin ()
@@ -39,10 +44,8 @@ func (raw *Raw) HandleUDPConn(uaddr *net.UDPAddr, local *net.UDPConn) {
39
44
raw .UDPNodes .OnError (node )
40
45
return
41
46
}
42
-
43
47
defer func () {
44
48
rc .Close ()
45
- close (bc .Ch )
46
49
delete (raw .UDPBufferChMap , uaddr .String ())
47
50
}()
48
51
@@ -52,34 +55,45 @@ func (raw *Raw) HandleUDPConn(uaddr *net.UDPAddr, local *net.UDPConn) {
52
55
wg .Add (1 )
53
56
54
57
go func () {
55
- buf := outboundBufferPool .Get ().([]byte )
58
+ buf := OutboundBufferPool .Get ().([]byte )
59
+ wt := 0
56
60
for {
57
61
i , err := rc .Read (buf )
58
62
if err != nil {
59
63
logger .Logger .Info (err )
60
64
break
61
65
}
66
+ rc .SetReadDeadline (time .Now ().Add (constant .MaxConKeepAlive ))
62
67
if _ , err := local .WriteToUDP (buf [0 :i ], uaddr ); err != nil {
63
68
logger .Logger .Info (err )
64
69
break
65
70
}
71
+ wt += i
66
72
}
67
- outboundBufferPool .Put (buf )
73
+ web .NetWorkTransmitBytes .Add (float64 (wt * 2 ))
74
+ OutboundBufferPool .Put (buf )
68
75
wg .Done ()
76
+ close (bc .Ch )
69
77
}()
70
78
79
+ wt := 0
71
80
for b := range bc .Ch {
81
+ wt += len (b )
82
+ rc .SetReadDeadline (time .Now ().Add (constant .MaxConKeepAlive ))
72
83
if _ , err := rc .Write (b ); err != nil {
73
84
logger .Logger .Info (err )
85
+ close (bc .Ch )
74
86
break
75
87
}
76
88
}
89
+ web .NetWorkTransmitBytes .Add (float64 (wt * 2 ))
77
90
wg .Wait ()
78
91
}
79
92
80
93
func (raw * Raw ) HandleTCPConn (c * net.TCPConn ) error {
81
94
defer c .Close ()
82
-
95
+ web .CurTCPNum .Inc ()
96
+ defer web .CurTCPNum .Dec ()
83
97
node := raw .TCPNodes .PickMin ()
84
98
defer raw .TCPNodes .DeferPick (node )
85
99
@@ -89,18 +103,19 @@ func (raw *Raw) HandleTCPConn(c *net.TCPConn) error {
89
103
return err
90
104
}
91
105
logger .Logger .Infof ("[raw] HandleTCPConn from %s to %s" , c .LocalAddr ().String (), node .Remote )
92
-
93
106
defer rc .Close ()
107
+
94
108
return transport (c , rc )
95
109
}
96
110
97
111
func (raw * Raw ) HandleWsRequset (w http.ResponseWriter , req * http.Request ) {
112
+ web .CurTCPNum .Inc ()
113
+ defer web .CurTCPNum .Dec ()
98
114
wsc , _ , _ , err := ws .UpgradeHTTP (req , w )
99
115
if err != nil {
100
116
return
101
117
}
102
118
defer wsc .Close ()
103
-
104
119
node := raw .TCPNodes .PickMin ()
105
120
defer raw .TCPNodes .DeferPick (node )
106
121
@@ -119,12 +134,13 @@ func (raw *Raw) HandleWsRequset(w http.ResponseWriter, req *http.Request) {
119
134
}
120
135
121
136
func (raw * Raw ) HandleWssRequset (w http.ResponseWriter , req * http.Request ) {
137
+ web .CurTCPNum .Inc ()
138
+ defer web .CurTCPNum .Dec ()
122
139
wsc , _ , _ , err := ws .UpgradeHTTP (req , w )
123
140
if err != nil {
124
141
return
125
142
}
126
143
defer wsc .Close ()
127
-
128
144
node := raw .TCPNodes .PickMin ()
129
145
defer raw .TCPNodes .DeferPick (node )
130
146
@@ -143,8 +159,9 @@ func (raw *Raw) HandleWssRequset(w http.ResponseWriter, req *http.Request) {
143
159
}
144
160
145
161
func (raw * Raw ) HandleMWssRequset (c net.Conn ) {
162
+ web .CurTCPNum .Inc ()
163
+ defer web .CurTCPNum .Dec ()
146
164
defer c .Close ()
147
-
148
165
node := raw .TCPNodes .PickMin ()
149
166
defer raw .TCPNodes .DeferPick (node )
150
167
0 commit comments