https://github.com/watermint/bwlimit
Go library for bandwidth limitor of multiple Reader/Writer
https://github.com/watermint/bwlimit
bandwidth bwlimit concurrency go golang library reader writer
Last synced: 5 months ago
JSON representation
Go library for bandwidth limitor of multiple Reader/Writer
- Host: GitHub
- URL: https://github.com/watermint/bwlimit
- Owner: watermint
- License: mit
- Created: 2016-11-25T14:15:31.000Z (over 9 years ago)
- Default Branch: master
- Last Pushed: 2017-07-11T09:10:29.000Z (almost 9 years ago)
- Last Synced: 2024-04-16T18:50:33.819Z (about 2 years ago)
- Topics: bandwidth, bwlimit, concurrency, go, golang, library, reader, writer
- Language: Go
- Homepage:
- Size: 9.77 KB
- Stars: 1
- Watchers: 4
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE.md
Awesome Lists containing this project
README
# bwlimit
[](https://travis-ci.org/watermint/bwlimit)
[](https://coveralls.io/github/watermint/bwlimit?branch=master)
Limit IO bandwidth for multiple io.Reader/io.Writer.
## Usage
```go
func main() {
// Limit to 100k Bytes per second
bwlimit := NewBwlimit(100 * 1024, false)
// Create io.Reader wrapper
f1, _ := os.Open("data1.dat")
fr1 := bwlimit.Reader(f1)
f2, _ := os.Open("data2.dat")
fr2 := bwlimit.Reader(f2)
// Read loop
for {
buf := make([]byte, 100)
n, err1 := fr1.Read(buf)
n, err2 := fr2.Read(buf)
// ...
}
// Wait for all reader close or reach EOF
bwlimit.Wait()
}
```
## Internal
`Bwlimit` limits bandwidth by adjusting window size for each `io.Reader` or `io.Writer`. `Bwlimit` runs goroutine which invoke adjustment every takt time. Takt time is 10ms by default.
This mean if you setup `Bwlimit` as 100Mbytes per sec. Wrapped `Reader`/`Writer` could transmit 1Mbytes per 10ms. If your network router etc don't have enough buffer for hundle these traffic, please consider more higher fequencey like below.
```go
bwlimit := NewBwlimit(100 * 1024, false)
bwlimit.SetTaktPerSecond(1000)
```
In current implementation, above 1000 takt per second will be adjusted into 1000.