12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- package otherutils
- import (
- "leafstalk/log"
- "time"
- )
- type HitCount struct {
- count int
- tick int64
- isAcc bool
- name string
- }
- func NewHitCount(name string, isAcc bool) *HitCount {
- hc := new(HitCount)
- hc.name = name
- hc.isAcc = isAcc
- return hc
- }
- // 统计调用次数或每秒调用次数
- // 1000000
- func (h *HitCount) Hit() {
- h.count += 1
- if h.count%300 == 0 {
- ct := time.Now().Unix()
- if ct-h.tick >= 5 {
- if h.isAcc {
- log.Warnf("%s receivePacket Count %v", h.name, h.count)
- } else {
- log.Warnf("%s receivePacket Count %v", h.name, h.count/5)
- h.count = 0
- }
- h.tick = ct
- }
- }
- }
- // 按指定频率调用callBack,
- func StartTicker(d time.Duration, name string, rate int, callBack func()) {
- stopTimer := time.NewTimer(d)
- logTicker := time.NewTicker(time.Second * 2)
- // 1s = 20*50MS
- sendTicker := time.NewTicker(time.Millisecond * 50)
- rate = (rate + 19) / 20
- go func() {
- wt := time.NewTimer(5 * time.Second)
- <-wt.C
- ncount := 0
- for {
- select {
- case <-stopTimer.C:
- logTicker.Stop()
- log.Warnf("%s sendPacket End: %v", name, ncount)
- return
- case <-logTicker.C:
- log.Warnf("%s sendPacket Count: %v", name, ncount/2)
- ncount = 0
- continue
- case <-sendTicker.C:
- for i := 0; i < rate; i += 1 {
- callBack()
- ncount += 1
- }
- }
- }
- }()
- }
|