This commit is contained in:
zhouyuyan
2017-08-23 19:24:27 +08:00
parent fe936d0e37
commit 00abbac00f
5 changed files with 141 additions and 24 deletions

57
broker/msgpool.go Normal file
View File

@@ -0,0 +1,57 @@
package broker
import "sync"
type Message struct {
client *client
msg []byte
pool *MessagePool
}
type MessagePool struct {
l sync.Mutex
maxuser int
user int
queue chan *Message
}
func (p *MessagePool) Init(num int, maxusernum int) {
p.maxuser = maxusernum
p.queue = make(chan *Message, num)
for k := 0; k < num; k++ {
m := &Message{}
m.Pool = p
p.Push(m)
}
}
func (p *MessagePool) GetPool() *MessagePool {
p.l.Lock()
if p.user+1 < p.maxuser {
p.user += 1
p.l.Unlock()
return p
} else {
p.l.Unlock()
return nil
}
}
func (p *MessagePool) Reduce() {
p.l.Lock()
p.user -= 1
p.l.Unlock()
}
func (p *MessagePool) Pop() *Message {
p2 := <-p.queue
return p2
}
func (p *MessagePool) Push(pmessage *Message) {
p.queue <- pmessage
}