Torrent client designed for seeding tens of thousands of torrents.

Related tags

bittorrent
Overview

Gamayun

This project is currently a prototype. It is not usable in any shape or form.

One day, this will be an efficient BitTorrent client, handling large amounts of torrents, optimized for long-term seeding.

Issues
  • Provide CLI tool for showing information from torrent file

    Provide CLI tool for showing information from torrent file

    Basically, provide a tool similar to transmission-show, but add support for structured output and accessing all information, including the source tag. This tool will be part of how to use gamayun. For example, to seed torrents from directories based on the tracker, one could do something like gamayun --add foo.torrent --dir /seed/$(gamayun-info --source foo.torrent)

    frontend 
    opened by dominikh 0
  • Be quicker at unchoking new peers

    Be quicker at unchoking new peers

    We choke/unchoke peers every 10 seconds, based on an choking algorithm. However, I don't think it makes sense to wait 10 seconds to unchoke peers if we still have free slots. We should unchoke them as soon as they express their interest.

    performance 
    opened by dominikh 0
  • Load metainfo lazily

    Load metainfo lazily

    In a seed-centric workload with lots of torrents, keeping all metainfo in memory at all times is a waste of memory. The majority of torrents will be idle and not need to know more than their infohash. Even active torrents won't need piece hashes if they're just seeding. We should load metainfo lazily, and only load the subset of metainfo that we need.

    performance 
    opened by dominikh 0
  • Investigate using io_uring for disk I/O

    Investigate using io_uring for disk I/O

    We don't want to maintain an in-process read cache, as that just duplicates what's already in the kernel's page cache. We also want to let the OS handle readahead for us. However, in the worst case, we'll end up doing 16 KiB random reads, which will spend a significant amount of time in syscall overhead. See if io_uring might help with this. It would also reduce the number of threads we'd need.

    performance 
    opened by dominikh 0
  • Implement flexible connection limit

    Implement flexible connection limit

    A static per-torrent peer limit is quite wasteful.

    If we're happy to have 100 peers globally, and we have only one active torrent, then that torrent should be able to have 100 peers. Instead, have a global peer limit, a limit of active torrents, and dynamically adjust per-torrent limits, possibly disconnecting peers from busy torrents when new torrents become active.

    The same algorithm probably works for incoming and outgoing connections.

    enhancement 
    opened by dominikh 0
  • Support PEX

    Support PEX

    null

    enhancement low-priority 
    opened by dominikh 0
  • Support DHT

    Support DHT

    null

    enhancement low-priority 
    opened by dominikh 0
  • Support UPnP or whatever is required for automatic port forwarding

    Support UPnP or whatever is required for automatic port forwarding

    null

    enhancement low-priority 
    opened by dominikh 0
  • Work around bad traffic accounting in trackers

    Work around bad traffic accounting in trackers

    Traffic accounting in bittorrent trackers is a hacky mess and has a tendency to break.

    One series of events that has been observed to cause issues is this:

    1. peer_id=1, event=started, downloaded=0
    2. peer_id=1, event="", downloaded=5
    3. peer_id=1, event=completed, downloaded=10
    4. a day of no internet connectivity while the client continues to run
    5. peer_id=1, event="", downloaded=10

    Some trackers seem to interpret event 5 as a new download, with 10 bytes downloaded, causing a total of 20 bytes downloaded across two downloads.I don't know why they would do that, as opposed to rejecting the announce since, if the previous session has timed out, there is no matching event=started announce, but it's the only explanation I could come up with for behavior I have observed, where a multi-hour internet outage resulted in doubled download stats.

    We should probably stop retrying announces after a while and consider the session closed. The next announce, then, would be a new event=started announce, with downloaded=0. This will cause us to under-report some downloaded, but only the amount between the last successful announce and last failed announce. This will generally be much less than what we can over-report, namely the entire torrent.

    We might also want to immediately stop and then start a torrent that has finished downloading, to ensure a fresh session with downloaded=0.

    enhancement 
    opened by dominikh 1
  • Support IPv6

    Support IPv6

    null

    enhancement 
    opened by dominikh 0
Owner
Dominik Honnef
Long-time Go user, contributor, and author of many Go related tools, including Staticcheck.
Dominik Honnef
torpar is TUI client for Torrent Paradise .

torpar is TUI client for Torrent Paradise . Torrent Paradise is Decentralized DHT Torrent Search Site

Var Bhat 191 Sep 13, 2021
A totally configurable terminal torrent client.

mtorrent A totally configurable terminal torrent client. Download go get github.com/nektro/mtorrent Releases https://github.com/nektro/mtorrent/relea

Meghan 63 Aug 30, 2021
🌧 BitTorrent client and library in Go

rain BitTorrent client and library in Go. Running in production at put.io. Features Core protocol Fast extension Magnet links Multiple trackers UDP tr

Cenk Altı 628 Sep 15, 2021
Self-hostable , easy-to-use , lightweight and feature-rich torrent client written in Go

Self-hostable , easy-to-use , lightweight and feature-rich torrent client written in Go . It comes with beautiful Web UI and Optional Multi-User Support . Run Locally or Host in Server . Open/Download/Stream Torrents in Browser Right Away!

Var Bhat 1.3k Sep 25, 2021
torsniff - a sniffer that sniffs torrents from BitTorrent network

torsniff - a sniffer that sniffs torrents from BitTorrent network English | 简体中文 Introduction torsniff is a torrent sniffer, it sniffs torrents that p

null 3.8k Sep 22, 2021
🐈🌐 nyaa.si terminal BitTorrent tracker

koneko - TUI Client for nyaa.si ?? ?? Download Anime, Literature, Audio, Live Action, Pictures, Software Data - go-nyaa TUI - tview Installation ?? go

Ilya Revenko 117 Sep 7, 2021
Download movie from YTS

Torrent-Box Download movie form YTS without visiting to YTS built top on anacrolix/torrent lib. Motivation Most of the times, We are lazy people; to s

Sithum Bopitiya 16 Aug 7, 2021
V3IO Frames ("Frames") is a Golang based remote data frames access (over gRPC or HTTP stream)

V3IO Frames ("Frames") is a multi-model open-source data-access library that provides a unified high-performance DataFrame API for working with different types of data sources (backends). The library was developed by Iguazio to simplify working with data in the Iguazio Data Science Platform ("the platform"), but it can be extended to support additional backend types.

null 23 Aug 5, 2021
Torrent client designed for seeding tens of thousands of torrents.

Gamayun This project is currently a prototype. It is not usable in any shape or form. One day, this will be an efficient BitTorrent client, handling l

Dominik Honnef 10 Sep 13, 2021
🐈📦 nyaa.si client library for Go. Fetch Anime, Manga, Music and more torrents

?? ?? go-nyaa nyaa.si client library for Go Built on top of: gofeed - search using RSS colly - scrap torrent details page Original idea: ejnshtein/nya

Ilya Revenko 15 Jul 18, 2021
Hprose 1.0 for Golang (Deprecated). Hprose 2.0 for Golang is here:

Hprose for Golang Introduction Installation Usage Http Server Http Client Synchronous Invoking Synchronous Exception Handling Asynchronous Invoking As

Hprose 138 Jun 28, 2021
Pusher Channels HTTP API library for Go

Pusher Channels HTTP Go Library The Golang library for interacting with the Pusher Channels HTTP API. This package lets you trigger events to your cli

Pusher 168 Sep 8, 2021
statsd client for Go

go-statsd-client About A StatsD client (UDP) for Go. Docs Viewable online at godoc.org. Example Some examples: import ( "log" "github.com/cac

null 167 Sep 12, 2021
search yts.mx for torrents

movies - search yts.mx for torrents install: go build && sudo mv movies /usr/local/bin --query QUERY, -q QUERY QUERY to search --rating RAT

Luke Krikorian 3 May 21, 2021
The Jenkins client was written by Golang

jenkins-client Document How to get it go.mod require github.com/jenkins-zh/jenkins-client Configuration Examples of jcli configuration - name: dev

Jenkins Chinese Community 8 Sep 22, 2021
A simple UDP server to make a virtual secure channel with the clients

udpsocket I made this package to make a virtual stateful connection between the client & server using the UDP protocol for a golang game server (as yo

TheRedRad 4 Aug 29, 2021
Premier ACME client library for Go

acmez - ACME client library for Go ACMEz ("ack-measy" or "acme-zee", whichever you prefer) is a fully-compliant RFC 8555 (ACME) implementation in pure

Matt Holt 129 Sep 18, 2021
Access more HTTP ports over CDN with this application.

More-Ports More Ports is a proxy service to establish all web-based applications on different ports on the server-side over a well known TCP port. It

Ahmet ÖZER 3 May 16, 2021