Skip to content

Commit 27f610b

Browse files
committed
fix udp
1 parent 854b7fa commit 27f610b

File tree

4 files changed

+42
-114
lines changed

4 files changed

+42
-114
lines changed

examples/server-tcp/main.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,10 @@ func main() {
2020
log.SetLevel(logx.LevelDebug)
2121

2222
srv := server.New(server.Config{
23-
Address: "127.0.0.1:8888",
23+
Address: "127.0.0.1:11111",
2424
Certs: nil,
2525
Timeout: 15 * time.Second,
26-
Network: "tcp",
26+
Network: "udp",
2727
}, log)
2828

2929
ctx, cancel := context.WithTimeout(context.TODO(), 120*time.Second)
@@ -42,6 +42,6 @@ type Echo struct {
4242

4343
func (*Echo) Handler(w io.Writer, r io.Reader, addr string) {
4444
b, _ := io.ReadAll(r)
45-
fmt.Println("[IN]", string(b), "[addr]", addr)
46-
w.Write(b)
45+
fmt.Println("[------", addr, "------]\n", string(b))
46+
// w.Write(b)
4747
}

internal/copy.go

Lines changed: 0 additions & 96 deletions
This file was deleted.

server/buffer.go

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package server
2+
3+
import (
4+
"bytes"
5+
6+
"go.osspkg.com/ioutils/pool"
7+
)
8+
9+
var bytesPool = pool.New[*Bytes](func() *Bytes {
10+
return &Bytes{Slice: make([]byte, 65535)}
11+
})
12+
13+
type Bytes struct {
14+
Slice []byte
15+
}
16+
17+
func (*Bytes) Reset() {}
18+
19+
var bufferPool = pool.New[*bytes.Buffer](func() *bytes.Buffer {
20+
return bytes.NewBuffer(make([]byte, 0, 65535))
21+
})

server/server.go

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -135,25 +135,28 @@ func (v *_server) handlingUDP(ctx context.Context, l net.PacketConn) error {
135135
default:
136136
}
137137

138-
readBuff := internal.BuffPool.Get()
139-
n, addr, err := internal.CopyFrom(readBuff, l)
140-
if err != nil || n == 0 {
141-
internal.BuffPool.Put(readBuff)
142-
return err
138+
b := bytesPool.Get()
139+
n, addr, err := l.ReadFrom(b.Slice)
140+
if err != nil {
141+
return internal.NormalCloseError(err)
142+
}
143+
if n == 0 {
144+
bytesPool.Put(b)
145+
continue
143146
}
144147

145148
v.wg.Background(func() {
146-
defer internal.BuffPool.Put(readBuff)
149+
wBuff, rBuff := bufferPool.Get(), bufferPool.Get()
150+
rBuff.Write(b.Slice[:n])
147151

148-
select {
149-
case <-ctx.Done():
150-
return
151-
default:
152-
}
152+
defer func() {
153+
bytesPool.Put(b)
154+
bufferPool.Put(wBuff)
155+
bufferPool.Put(rBuff)
156+
}()
153157

154-
writeBuff := internal.BuffPool.Get()
155-
v.handler.Handler(writeBuff, readBuff, addr.String())
156-
if _, err0 := internal.CopyTo(l, writeBuff, addr); err0 != nil {
158+
v.handler.Handler(wBuff, rBuff, addr.String())
159+
if _, err0 := l.WriteTo(wBuff.Bytes(), addr); err0 != nil {
157160
v.log.WithFields(logx.Fields{
158161
"err": err0.Error(),
159162
"addr": addr.String(),

0 commit comments

Comments
 (0)