add packet buffer pool for connection
This commit is contained in:
@ -2,6 +2,7 @@ package bot
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
|
"sync"
|
||||||
|
|
||||||
"github.com/google/uuid"
|
"github.com/google/uuid"
|
||||||
|
|
||||||
@ -46,6 +47,7 @@ func NewClient() *Client {
|
|||||||
type Conn struct {
|
type Conn struct {
|
||||||
*net.Conn
|
*net.Conn
|
||||||
send, recv queue.Queue[pk.Packet]
|
send, recv queue.Queue[pk.Packet]
|
||||||
|
pool sync.Pool // pool of recv packet data
|
||||||
rerr error
|
rerr error
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -54,11 +56,13 @@ func warpConn(c *net.Conn, qr, qw queue.Queue[pk.Packet]) *Conn {
|
|||||||
Conn: c,
|
Conn: c,
|
||||||
send: qw,
|
send: qw,
|
||||||
recv: qr,
|
recv: qr,
|
||||||
|
pool: sync.Pool{New: func() any { return []byte{} }},
|
||||||
rerr: nil,
|
rerr: nil,
|
||||||
}
|
}
|
||||||
go func() {
|
go func() {
|
||||||
for {
|
for {
|
||||||
var p pk.Packet
|
// take a buffer from pool, after the packet is handled we put it back
|
||||||
|
p := pk.Packet{Data: wc.pool.Get().([]byte)}
|
||||||
if err := c.ReadPacket(&p); err != nil {
|
if err := c.ReadPacket(&p); err != nil {
|
||||||
wc.rerr = err
|
wc.rerr = err
|
||||||
break
|
break
|
||||||
|
@ -10,8 +10,8 @@ import (
|
|||||||
// HandleGame receive server packet and response them correctly.
|
// HandleGame receive server packet and response them correctly.
|
||||||
// Note that HandleGame will block if you don't receive from Events.
|
// Note that HandleGame will block if you don't receive from Events.
|
||||||
func (c *Client) HandleGame() error {
|
func (c *Client) HandleGame() error {
|
||||||
var p pk.Packet
|
|
||||||
for {
|
for {
|
||||||
|
var p pk.Packet
|
||||||
// Read packets
|
// Read packets
|
||||||
if err := c.Conn.ReadPacket(&p); err != nil {
|
if err := c.Conn.ReadPacket(&p); err != nil {
|
||||||
return err
|
return err
|
||||||
@ -22,6 +22,9 @@ func (c *Client) HandleGame() error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// return the packet buffer
|
||||||
|
c.Conn.pool.Put(p.Data)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user