Change BuffSizeCopy pool

module
ffdfgdfg 2019-08-26 23:29:22 +08:00
parent 4bb7e33b16
commit 53c2e472ae
5 changed files with 39 additions and 10 deletions

View File

@ -20,6 +20,7 @@ type BasePackager struct {
} }
func (Self *BasePackager) NewPac(contents ...interface{}) (err error) { func (Self *BasePackager) NewPac(contents ...interface{}) (err error) {
Self.Content = pool.CopyBuff.Get()
Self.clean() Self.clean()
for _, content := range contents { for _, content := range contents {
switch content.(type) { switch content.(type) {
@ -45,6 +46,7 @@ func (Self *BasePackager) Pack(writer io.Writer) (err error) {
return return
} }
err = binary.Write(writer, binary.LittleEndian, Self.Content) err = binary.Write(writer, binary.LittleEndian, Self.Content)
pool.CopyBuff.Put(Self.Content)
return return
} }
@ -56,13 +58,13 @@ func (Self *BasePackager) UnPack(reader io.Reader) (err error) {
if err != nil { if err != nil {
return return
} }
Self.Content = pool.GetBufPoolCopy() Self.Content = pool.CopyBuff.Get()
Self.Content = Self.Content[:Self.Length] Self.Content = Self.Content[:Self.Length]
//n, err := io.ReadFull(reader, Self.Content) //n, err := io.ReadFull(reader, Self.Content)
//if n != int(Self.Length) { //if n != int(Self.Length) {
// err = io.ErrUnexpectedEOF // err = io.ErrUnexpectedEOF
//} //}
err = binary.Read(reader, binary.LittleEndian, &Self.Content) err = binary.Read(reader, binary.LittleEndian, Self.Content)
return return
} }
@ -160,7 +162,7 @@ func (Self *MuxPackager) Pack(writer io.Writer) (err error) {
} }
func (Self *MuxPackager) UnPack(reader io.Reader) (err error) { func (Self *MuxPackager) UnPack(reader io.Reader) (err error) {
Self.Length=0 Self.Length = 0
err = binary.Read(reader, binary.LittleEndian, &Self.Flag) err = binary.Read(reader, binary.LittleEndian, &Self.Flag)
if err != nil { if err != nil {
return return

View File

@ -72,7 +72,6 @@ func (s *conn) Read(buf []byte) (n int, err error) {
s.Close() s.Close()
return 0, io.EOF return 0, io.EOF
} else { } else {
//pool.PutBufPoolCopy(s.readBuffer)
if node.val == nil { if node.val == nil {
//close //close
s.sendClose = true s.sendClose = true
@ -91,6 +90,7 @@ func (s *conn) Read(buf []byte) (n int, err error) {
} else { } else {
n = copy(buf, s.readBuffer[s.startRead:s.endRead]) n = copy(buf, s.readBuffer[s.startRead:s.endRead])
s.startRead += n s.startRead += n
pool.CopyBuff.Put(s.readBuffer)
} }
return return
} }
@ -137,7 +137,7 @@ func (s *conn) Close() (err error) {
return errors.New("the conn has closed") return errors.New("the conn has closed")
} }
s.isClose = true s.isClose = true
pool.PutBufPoolCopy(s.readBuffer) pool.CopyBuff.Put(s.readBuffer)
if s.readWait { if s.readWait {
s.readCh <- struct{}{} s.readCh <- struct{}{}
} }

View File

@ -162,8 +162,8 @@ func (s *Mux) readSession() {
break break
} }
if pack.Flag != 0 && pack.Flag != 7 { if pack.Flag != 0 && pack.Flag != 7 {
if pack.Length>10 { if pack.Length > 10 {
logs.Warn(pack.Flag, pack.Id, pack.Length,string(pack.Content[:10])) logs.Warn(pack.Flag, pack.Id, pack.Length, string(pack.Content[:10]))
} }
} }
s.pingOk = 0 s.pingOk = 0
@ -205,7 +205,7 @@ func (s *Mux) readSession() {
s.connMap.Delete(pack.Id) s.connMap.Delete(pack.Id)
} }
} else if pack.Flag == common.MUX_NEW_MSG { } else if pack.Flag == common.MUX_NEW_MSG {
pool.PutBufPoolCopy(pack.Content) pool.CopyBuff.Put(pack.Content)
} }
} }
s.Close() s.Close()

View File

@ -63,7 +63,7 @@ func (entry *sliceEntry) Clear() bool {
return false return false
} }
for i := 0; i < entry.Size(); i++ { for i := 0; i < entry.Size(); i++ {
pool.PutBufPoolCopy(entry.element[i].val) pool.CopyBuff.Put(entry.element[i].val)
entry.element[i] = nil entry.element[i] = nil
} }
entry.element = nil entry.element = nil

View File

@ -59,6 +59,27 @@ func PutBufPoolMax(buf []byte) {
} }
} }
type CopyBufferPool struct {
pool sync.Pool
}
func (Self *CopyBufferPool) New() {
Self.pool = sync.Pool{
New: func() interface{} {
return make([]byte, PoolSizeCopy)
},
}
}
func (Self *CopyBufferPool) Get() []byte {
return Self.pool.Get().([]byte)
}
func (Self *CopyBufferPool) Put(x []byte) {
x = x[:0]
Self.pool.Put(x)
}
type BufferPool struct { type BufferPool struct {
pool sync.Pool pool sync.Pool
} }
@ -82,7 +103,13 @@ func (Self *BufferPool) Put(x *bytes.Buffer) {
var once = sync.Once{} var once = sync.Once{}
var BuffPool = BufferPool{} var BuffPool = BufferPool{}
var CopyBuff = CopyBufferPool{}
func newPool() {
BuffPool.New()
CopyBuff.New()
}
func init() { func init() {
once.Do(BuffPool.New) once.Do(newPool)
} }