34 lines
876 B
Go
34 lines
876 B
Go
// Package flow 提供并发安全的流量统计(只统计、不限制),常配合 conn 包使用。
|
|
package flow
|
|
|
|
import (
|
|
"sync/atomic"
|
|
)
|
|
|
|
// 统计流量 不限制流量
|
|
type Flow struct {
|
|
SendFlow int64 `json:"sendFlow"`
|
|
RecvFlow int64 `json:"recvFlow"`
|
|
FlowLimit int64 `json:"flowLimit"`
|
|
}
|
|
|
|
// Add 累计发送/接收字节数
|
|
func (f *Flow) Add(send, recv int64) {
|
|
atomic.AddInt64(&f.SendFlow, send)
|
|
atomic.AddInt64(&f.RecvFlow, recv)
|
|
}
|
|
|
|
// Reset 取出并清零收发流量,返回清零前的值(用于周期性上报)
|
|
func (f *Flow) Reset() (int64, int64) {
|
|
send := atomic.SwapInt64(&f.SendFlow, 0)
|
|
recv := atomic.SwapInt64(&f.RecvFlow, 0)
|
|
return send, recv
|
|
}
|
|
|
|
// Get 读取当前收发流量(不清零)
|
|
func (f *Flow) Get() (int64, int64) {
|
|
send := atomic.LoadInt64(&f.SendFlow)
|
|
recv := atomic.LoadInt64(&f.RecvFlow)
|
|
return send, recv
|
|
}
|