dockerfiles/anylink/server/handler/pool.go

90 lines
1.5 KiB
Go
Raw Normal View History

2021-06-08 20:45:26 +08:00
package handler
import (
"sync"
2021-08-02 20:41:35 +08:00
"github.com/bjdgyc/anylink/base"
2021-06-08 20:45:26 +08:00
"github.com/bjdgyc/anylink/sessdata"
)
2021-08-02 20:41:35 +08:00
// 不允许直接修改
// [6] => PType
2021-08-26 23:09:52 +08:00
var plHeader = []byte{
'S', 'T', 'F', 1,
0x00, 0x00, /* Length */
0x00, /* Type */
0x00, /* Unknown */
}
2021-08-02 20:41:35 +08:00
2021-06-08 20:45:26 +08:00
var plPool = sync.Pool{
New: func() interface{} {
2021-08-02 20:41:35 +08:00
b := make([]byte, BufferSize)
2021-06-08 20:45:26 +08:00
pl := sessdata.Payload{
2021-08-02 20:41:35 +08:00
LType: sessdata.LTypeIPData,
PType: 0x00,
Data: b,
2021-06-08 20:45:26 +08:00
}
// fmt.Println("plPool-init", len(pl.Data), cap(pl.Data))
return &pl
},
}
func getPayload() *sessdata.Payload {
pl := plPool.Get().(*sessdata.Payload)
return pl
}
func putPayload(pl *sessdata.Payload) {
2021-08-02 20:41:35 +08:00
// 错误数据丢弃
if cap(pl.Data) != BufferSize {
base.Warn("payload cap is err", cap(pl.Data))
return
}
pl.LType = sessdata.LTypeIPData
pl.PType = 0x00
pl.Data = pl.Data[:BufferSize]
2021-06-08 20:45:26 +08:00
plPool.Put(pl)
}
var bytePool = sync.Pool{
New: func() interface{} {
2021-08-02 20:41:35 +08:00
b := make([]byte, BufferSize)
2021-06-08 20:45:26 +08:00
// fmt.Println("bytePool-init")
2021-08-02 20:41:35 +08:00
return &b
2021-06-08 20:45:26 +08:00
},
}
2021-08-02 20:41:35 +08:00
func getByteZero() *[]byte {
b := bytePool.Get().(*[]byte)
*b = (*b)[:0]
2021-06-08 20:45:26 +08:00
return b
}
2021-08-02 20:41:35 +08:00
func getByteFull() *[]byte {
b := bytePool.Get().(*[]byte)
2021-06-08 20:45:26 +08:00
return b
}
2021-08-02 20:41:35 +08:00
func putByte(b *[]byte) {
*b = (*b)[:BufferSize]
2021-06-08 20:45:26 +08:00
bytePool.Put(b)
}
2021-08-26 23:09:52 +08:00
// 长度 34 小对象
var byte34Pool = sync.Pool{
New: func() interface{} {
b := make([]byte, 34)
return &b
},
}
func getByte34() *[]byte {
b := byte34Pool.Get().(*[]byte)
return b
}
func putByte34(b *[]byte) {
*b = (*b)[:34]
byte34Pool.Put(b)
}