Files
Archive/echo/internal/conn/limit_reader.go
2024-07-03 20:29:14 +02:00

30 lines
622 B
Go

package conn
import (
"io"
"net"
"github.com/juju/ratelimit"
)
type RateLimitedConn struct {
net.Conn
bucket *ratelimit.Bucket
reader io.Reader
}
func NewRateLimitedConn(conn net.Conn, kbps int64) *RateLimitedConn {
bps := float64(kbps) * 1000 // Convert kbps to bps (1 kbps = 1000 bps)
rateBytesPerSec := bps / 8 // 1KB = 1024B, 1B = 8b
bucket := ratelimit.NewBucketWithRate(rateBytesPerSec, int64(rateBytesPerSec))
return &RateLimitedConn{
Conn: conn,
bucket: bucket,
reader: ratelimit.Reader(conn, bucket),
}
}
func (r *RateLimitedConn) Read(p []byte) (int, error) {
return r.reader.Read(p)
}