init
This commit is contained in:
78
comet/round.go
Normal file
78
comet/round.go
Normal file
@@ -0,0 +1,78 @@
|
||||
package comet
|
||||
|
||||
import (
|
||||
"github.com/Terry-Mao/goim/pkg/bytes"
|
||||
"github.com/Terry-Mao/goim/pkg/time"
|
||||
"gitlab.33.cn/chat/im/comet/conf"
|
||||
)
|
||||
|
||||
// RoundOptions round options.
|
||||
type RoundOptions struct {
|
||||
Timer int
|
||||
TimerSize int
|
||||
Reader int
|
||||
ReadBuf int
|
||||
ReadBufSize int
|
||||
Writer int
|
||||
WriteBuf int
|
||||
WriteBufSize int
|
||||
Task int
|
||||
TaskSize int
|
||||
}
|
||||
|
||||
// Round userd for connection round-robin get a reader/writer/timer for split big lock.
|
||||
type Round struct {
|
||||
readers []bytes.Pool
|
||||
writers []bytes.Pool
|
||||
timers []time.Timer
|
||||
options RoundOptions
|
||||
}
|
||||
|
||||
// NewRound new a round struct.
|
||||
func NewRound(c *conf.Config) (r *Round) {
|
||||
var i int
|
||||
r = &Round{
|
||||
options: RoundOptions{
|
||||
Reader: c.TCP.Reader,
|
||||
ReadBuf: c.TCP.ReadBuf,
|
||||
ReadBufSize: c.TCP.ReadBufSize,
|
||||
Writer: c.TCP.Writer,
|
||||
WriteBuf: c.TCP.WriteBuf,
|
||||
WriteBufSize: c.TCP.WriteBufSize,
|
||||
Timer: c.Protocol.Timer,
|
||||
TimerSize: c.Protocol.TimerSize,
|
||||
Task: c.Protocol.Task,
|
||||
TaskSize: c.Protocol.TaskSize,
|
||||
}}
|
||||
// reader
|
||||
r.readers = make([]bytes.Pool, r.options.Reader)
|
||||
for i = 0; i < r.options.Reader; i++ {
|
||||
r.readers[i].Init(r.options.ReadBuf, r.options.ReadBufSize)
|
||||
}
|
||||
// writer
|
||||
r.writers = make([]bytes.Pool, r.options.Writer)
|
||||
for i = 0; i < r.options.Writer; i++ {
|
||||
r.writers[i].Init(r.options.WriteBuf, r.options.WriteBufSize)
|
||||
}
|
||||
// timer
|
||||
r.timers = make([]time.Timer, r.options.Timer)
|
||||
for i = 0; i < r.options.Timer; i++ {
|
||||
r.timers[i].Init(r.options.TimerSize)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// Timer get a timer.
|
||||
func (r *Round) Timer(rn int) *time.Timer {
|
||||
return &(r.timers[rn%r.options.Timer])
|
||||
}
|
||||
|
||||
// Reader get a reader memory buffer.
|
||||
func (r *Round) Reader(rn int) *bytes.Pool {
|
||||
return &(r.readers[rn%r.options.Reader])
|
||||
}
|
||||
|
||||
// Writer get a writer memory buffer pool.
|
||||
func (r *Round) Writer(rn int) *bytes.Pool {
|
||||
return &(r.writers[rn%r.options.Writer])
|
||||
}
|
||||
Reference in New Issue
Block a user