tba

package module
v0.0.0-...-b98feab Latest Latest
Warning

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

Go to latest
Published: Apr 8, 2019 License: MIT Imports: 4 Imported by: 0

README

Token Bucket Algorithm

The read about this https://en.wikipedia.org/wiki/Token_bucket

Features

  • Simple and clean API
  • Load optimized
  • Smooth limiting

Usage example

import "github.com/PSIAlt/tba"

##########
Example 1:
b1 := tba.NewQPSLimit(10) //Allow to get 1 token(query) every 100ms
defer b1.Stop()
if ! b1.Ask() {
	// Not allowed
	return ErrLimit
}

##########
Example 2:
b1 := tba.NewQPMLimit(60) //Allow to get 1 token(query) every 1s
defer b1.Stop()
if ! b1.Ask() {
	// Not allowed
	return ErrLimit
}

##########
Example 3:
b1 := tba.NewQPSLimit(100000) //Will atomatically allow 100 requests every 1ms
defer b1.Stop()
if ! b1.Ask() {
	// Not allowed
	return ErrLimit
}

##########
Example 4(advanced):
// Allow to get 10 tokens every 1ms, with bursts up to 20000
b1 := tba.NewBucket(20000, 10, time.Millisecond)
defer b1.Stop()
if ! b1.Ask() {
	// Not allowed
	return ErrLimit
}

##########
Example 5(advanced):
// Account user connection bandwidth, limit it at 10kbit/s rate
// Allow to get 10 tokens(bits) every 1ms, with bursts up to 20kbit/s
b1 := tba.NewBucket(20000, 10, time.Millisecond)
defer b1.Stop()
b1.Wait( pkt.bytes*8 ) //Wait availability
forwardPacket(pkt)


Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Bucket

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

func NewBucket

func NewBucket(bucketSize, tokenAdd int64, period time.Duration) *Bucket

func NewQPMLimit

func NewQPMLimit(limitQPM int64) *Bucket

Create a bucket that limits QPM (queries per minutes)

func NewQPSLimit

func NewQPSLimit(limitQPS int64) *Bucket

Create a bucket that limits QPS (queries per second)

func (*Bucket) Ask

func (b *Bucket) Ask() bool

func (*Bucket) AskN

func (b *Bucket) AskN(v int64) bool

func (*Bucket) Drain

func (b *Bucket) Drain()

func (*Bucket) Fill

func (b *Bucket) Fill()

func (*Bucket) MaxBurst

func (b *Bucket) MaxBurst(sz int64)

func (*Bucket) Stop

func (b *Bucket) Stop()

Stop working, shutdown. Concurrent calls to this object can hang/crash

func (*Bucket) Wait

func (b *Bucket) Wait(v int64)

Wait&acquire 'v' tokens

Jump to

Keyboard shortcuts

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