mirror of
https://github.com/fumiama/WireGold.git
synced 2026-06-12 12:50:28 +08:00
parallel listen
This commit is contained in:
@@ -42,16 +42,16 @@ type Packet struct {
|
||||
}
|
||||
|
||||
// NewPacket 生成一个新包
|
||||
func NewPacket(proto uint8, srcPort uint16, dst net.IP, dstPort uint16, data []byte) *Packet {
|
||||
func NewPacket(proto uint8, srcPort uint16, dst net.IP, dstPort uint16, data []byte) (p *Packet) {
|
||||
// logrus.Debugln("[packet] new: [proto:", proto, ", srcport:", srcPort, ", dstport:", dstPort, ", dst:", dst, ", data:", data)
|
||||
return &Packet{
|
||||
Proto: proto,
|
||||
TTL: 16,
|
||||
SrcPort: srcPort,
|
||||
DstPort: dstPort,
|
||||
Dst: dst,
|
||||
Data: data,
|
||||
}
|
||||
p = SelectPacket()
|
||||
p.Proto = proto
|
||||
p.TTL = 16
|
||||
p.SrcPort = srcPort
|
||||
p.DstPort = dstPort
|
||||
p.Dst = dst
|
||||
p.Data = data
|
||||
return
|
||||
}
|
||||
|
||||
// Unmarshal 将 data 的数据解码到自身
|
||||
@@ -158,3 +158,8 @@ func (p *Packet) IsVaildHash() bool {
|
||||
logrus.Debugln("[packet] sum in packet:", hex.EncodeToString(p.Hash[:]))
|
||||
return sum == p.Hash
|
||||
}
|
||||
|
||||
// Put 将自己放回池中
|
||||
func (p *Packet) Put() {
|
||||
PutPacket(p)
|
||||
}
|
||||
|
||||
21
gold/head/pool.go
Normal file
21
gold/head/pool.go
Normal file
@@ -0,0 +1,21 @@
|
||||
package head
|
||||
|
||||
import "sync"
|
||||
|
||||
var packetPool = sync.Pool{
|
||||
New: func() interface{} {
|
||||
return new(Packet)
|
||||
},
|
||||
}
|
||||
|
||||
// SelectPacket 从池中取出一个 Packet
|
||||
func SelectPacket() *Packet {
|
||||
return packetPool.Get().(*Packet)
|
||||
}
|
||||
|
||||
// PutPacket 将 Packet 放回池中
|
||||
func PutPacket(p *Packet) {
|
||||
p.TeaTypeDataSZ = 0
|
||||
p.Data = nil
|
||||
packetPool.Put(p)
|
||||
}
|
||||
Reference in New Issue
Block a user