Skip to content

informalict/qos

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

The QOS (Quality of service) package provides:

  • bandwidth rate limiting.

Rate bandwidth allows for limiting bytes which can be sent or retrieved within some time.

Example usage for HTTP server:

package main

import (
	"context"
	"io"
	"log"
	"net"
	"net/http"

	"github.com/informalict/qos/bandwidth"
)

func main() {
	mux := http.NewServeMux()

	mux.HandleFunc("/helloworld", func(writer http.ResponseWriter, request *http.Request) {
		io.WriteString(writer, "Hello world!")
	})

	server := &http.Server{Addr: ":8080", Handler: mux}
	ln, err := net.Listen("tcp", server.Addr)
	if err != nil {
		log.Fatal("can not create tcp listner")
	}
	//By default, there are no Limits.
	bl := bandwidth.NewListener(context.Background(), ln)

	bytesPerSecond := 1000
	// burst describes how many bytes can be performed within one call of rate limiter.
	// usually it is the same value as bytesPerSecond.
	burst := 1000
	globalBytesPerSecond := bandwidth.NewConfig(bytesPerSecond, burst)
	connBytesPerSecond := bandwidth.NewConfig(bytesPerSecond, burst)
	bl.SetLimits(globalBytesPerSecond, connBytesPerSecond)
	
	err = server.Serve(bl)
	if err != nil {
		// handle error.
	}
}

Run unit tests

Run all tests:

go test ./... -v

or run only shorter test:

go test ./... -v -short

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages