bwio

package module
v1.0.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 5, 2017 License: Apache-2.0 Imports: 2 Imported by: 0

README

BWIO: io wrappers that limit bandwidth

Apache License v2.0 GoDoc Build Status Go Report codebeat badge codecov

Package bwio provides wrappers for io.Reader, io.Writer, io.Copy and io.CopyBuffer that limit the throughput to a given bandwidth. The limiter uses an internal time bucket and hibernates each io operation for short time periods, whenever the configured bandwidth has been exceeded.

The limiter tries to detect longer stalls and resets the bucket such that stalls do not cause subsequent high bursts. Usually you should choose small buffer sizes for low bandwidths and vice versa. The limiter tries to compensate for high buffer size / bandwidth ratio when detecting stalls, but this is not well tested.

Monotonic time

Support for monotonic time before Go version 1.8 was implemented in a branch, but has been dropped. Use Go version 1.9 or later in order to profit from transparent non-monotonic time robustness.

License

Copyright (c) 2017 Johannes Kohnen wjkohnen@users.noreply.github.com

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

Documentation

Overview

Package bwio provides wrappers for io.Reader, io.Writer, io.Copy and io.CopyBuffer that limit the throughput to a given bandwidth. The limiter uses an internal time bucket and hibernates each io operation for short time periods, whenever the configured bandwidth has been exceeded.

`bandwidth` is defined as bytes per second.

The limiter tries to detect longer stalls and resets the bucket such that stalls do not cause subsequent high bursts. Usually you should choose small buffer sizes for low bandwidths and vice versa. The limiter tries to compensate for high buffer size / bandwidth ratio when detecting stalls, but this is not well tested.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Copy

func Copy(dst io.Writer, src io.Reader, bandwidth int) (written int64, err error)

Copy copies the same way io.Copy does, except maintaining the given bandwidth. It uses a buffer size of 16 KiBytes.

func CopyBuffer

func CopyBuffer(dst io.Writer, src io.Reader, bandwidth int, buf []byte) (written int64, err error)

CopyBuffer copies the same way io.CopyBuffer does, except maintaining the given bandwidth. If buf is nil, CopyBuffer will create a buffer with size of 16 KiBytes.

Types

type Reader

type Reader struct {
	// contains filtered or unexported fields
}

Reader wraps another reader and maintains a given bandwidth.

func NewReader

func NewReader(r io.Reader, bandwidth int) *Reader

NewReader returns a new reader that wraps reader r and maintains the given bandwidth.

func (*Reader) Read

func (r *Reader) Read(p []byte) (n int, err error)

Read implements the io.Reader interface and maintains a given bandwidth.

type Writer

type Writer struct {
	// contains filtered or unexported fields
}

Writer wraps another writer and maintains a given bandwidth.

func NewWriter

func NewWriter(d io.Writer, bandwidth int) *Writer

NewWriter returns a new writer that wraps writer d and maintains a given bandwidth.

func (*Writer) Write

func (w *Writer) Write(p []byte) (n int, err error)

Write implements the io.Writer interface and maintains the given bandwidth.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL