Skip to content
/ chooch Public

Multi-stream HTTP downloader using range requests

Notifications You must be signed in to change notification settings

uplol/chooch

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

17 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

chooch - An Amazing Project

Downloads files faster than wget/curl (in theory) using multiple connections. Chooch recycles the slowest connection and re-connects with a new and unique source port.

In environments where LACP or ECMP (hash-based load balancing across multiple physical interfaces) is implemented, a naive multi-stream downloader may not utilize all the bond interfaces if they re-use the same static connections. Chooch aims to solve this by recycling slow connections and ensuring new connections are made with a new unique source port. Doing this adds entropy to the bond's hashing algorithm which may improve total throughput if the connections are evenly distributed across the it's physical interfaces.

In the future, Chooch may be expanded to support multiple source IPs, or could include a utility to pre-determine the best source port set to use for a given machine/network configuration. However, this optimization would require the download server to be reachable using a static address and port, as the source IP is a common facet used in bond hashing algorithms.

Features

  • Uses multiple connections in parallel to download quicker
  • Terminates the slowest connection and re-connects with a new client port.
  • Pre-allocates the file on-disk

Usage

USAGE:
    chooch [FLAGS] [OPTIONS] <url> <output>

FLAGS:
    -f, --force-overwrite    Overwrites existing output file if it already exists
    -h, --help               Prints help information
    -s, --skip-prealloc      Skips the pre-allocation of the target file
    -V, --version            Prints version information

OPTIONS:
    -i, --bind-ip <bind-ip>          Sets the IP address used to make outgoing connections.
    -c, --chunk-size <chunk-size>     [default: 32MB]
    -w, --workers <worker-count>      [default: 6]

ARGS:
    <url>       The URL you wish to download
    <output>    The output destination for this download

Todo

  • TLS Support
  • Handle requests without content-length for unlimited streaming
  • More options for HTTP requests (headers, method, etc)

PRs welcome :)

About

Multi-stream HTTP downloader using range requests

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages