8000 GitHub - NJUPT-NYR/RedisTracker
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content
This repository was archived by the owner on Apr 28, 2021. It is now read-only.

NJUPT-NYR/RedisTracker

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 

Repository files navigation

RedisTracker

A redis module built to serve as a bittorrent tracker.

设计思路

announce info_hash passkey ip port numwant event

每个info_hash会对应到大概这样的结构体

struct Peer {
    char passkey[32];
    char addr4[6];
    char addr6[18];
}

struct tmp {
    DB db[2]; // redis hashtable where stored Peer*, 2 to rehash
    timestamp when_to_die; // key to decide expire 
}

struct peer_set {
    tmp t[2]; 
}

假定超时时间30min 对于announce操作,找到了对应peer_set后,会将数据插入到t[1]中去 同时检查t[0]是否达到了回收要求(when_to_die>30) 如果达到,那么t[1]置为t[0],同时创建新的tmp 根据以上信息,每个做种的超时时间在30min-60min不等。
同时对key设置30min的超时,可以保证不会有死种存在。
最后会返回numwant个种子,为了节省parse,直接返回compact格式,后面可以视情况加上compact选项
关于节省内存,考虑到最后要返回compact信息,每个tmp维护一大块内存,每个Peer的addr4和addr6直接存偏移。这时候回包直接发一整块连续地址,但是需要考虑stopped产生的地址不连续性

复杂度分析

每次会有两个O(k)的dict遍历,O(n)的response生成(存疑,如何随机遍历还不明确)
compaction时有O(n)的遍历删除操作,考虑到pt特性,大部分的peer会被重新移动到新到table中,最终不会有太多的删除动作。

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published
0