是否允许在Mainline DHT中的同一ip:端口对后面运行几个不同的DHT节点?哪个节点应该回复DHT查询消息?全部或其中一个?
先感谢您.
我有一个分布式SQL数据库的想法,使用bittorrent协议来提取和写入其数据.
为了论证,我们假设这是一个消息传递应用程序,其中数千个用户运行包含消息传递窗口的程序,以及用于编写消息的输入框.
编写的每条消息都会对自己的sqlite DB进行INSERT.
你拥有的是大量的delta文件,所有的P2P托管都是为了冗余,在很多机器上更新本地的.sqlite数据库.
如何刮取某个文件名的种子?我已经阅读了http bittorrent跟踪器规范,但您似乎只能根据其特定的信息名称查询文件.有没有办法查询一组文件,或基于文件名?
如何从跟踪器下载.torrent文件?我是否需要在中央服务器上托管文件,还是可以使用跟踪器以某种方式下载文件?如果我必须自己托管.torrent文件......
我在这里先向您的帮助表示感谢.
我想知道是否有人有一个如何使用NodeJS下载torrent的例子?基本上,我有一个种子的RSS Feed,我迭代并获取torrent文件URL,然后想在服务器上启动该torrent的下载.
我已经解析并在RSS中循环了,但是我已经尝试了几个npm包但它们要么已经崩溃,要么只是不稳定.如果有人有任何建议,例子,任何东西......我将非常感激.谢谢.
router.get('/', function(req, res) {
var options = {};
parser.parseURL('rss feed here', options, function(err, articles) {
var i = 0;
var torrent;
for (var title in articles.items) {
console.log(articles.items[i]['url']);
//download torrent here
i++;
}
});
});Run Code Online (Sandbox Code Playgroud)
我正在尝试使用多线程来连接多个对等端 simultinaly。当我运行我的代码并运行一个线程时,程序在“连接”函数中崩溃并写道:“Abort() 已被调用”。
这是我调用线程的方式:
TcpPeers(OrderedMap<std::string, unsigned short> peers, std::string infoHash)
{
this->peers = peers;
peersArr = new Peer[peers.GetSize()];
for (int i = 0; i < peers.GetSize(); i++)
{
Peer * pp = new Peer(peers.GetKeyByIndex(i), peers.GetValueByIndex(i), infoHash);
*(peersArr + i) = *pp;
}
for (int i = 0; i < peers.GetSize(); i++)
{
std::thread t1(&Peer::CreateConnection, *(peersArr + i));
}
}
Run Code Online (Sandbox Code Playgroud)
peer 是我在尝试实现 bittorent 协议时需要连接的另一个客户端。
同样,当有一个线程时一切正常,当我有两个以上的同行时,一切都崩溃了。
uTorrent有一个可用性指示器,显示有多少你所连接的同伴拥有多少洪流.如果它小于1,则您连接到的所有对等组合都没有整个torrent.然而,对于"健康"的洪流,此数字通常大于1,表明即使某些种子断开连接,数据流也不会完全中断.
可用性指数究竟是如何计算的?
偶尔,我会在完成下载后留下aria2c连接种子,然后跳上不喜欢我播种的网络.
我想在完成下载后立即关闭连接,防止我播种.我怎样才能做到这一点?
在我的新周末项目中,我决定从头开始编写一个 BitTorrent 客户端,根本没有准备好使用库。经过两天寻找文档后,我已经准备放弃了:smile:。我知道有BEP,但它们远远不足以理解所有规范。在阅读了更多内容之后,我认为跟踪器和对等协议似乎很旧并且易于理解/实现(是的,我知道,要编写具有平衡、对等选择、优化的良好代码,这并不容易,正如我刚才所说的,但我只想做基础知识来学习,而不是与那里的数十个优秀客户竞争。)
因此,我决定从 DHT 开始,这似乎是更复杂的部分,而且文档也更少。当您停止寻找 bittorrent DHT 或主线 DHT 并开始寻找 kademlia DHT 时,您会获得更多信息,但如何将它们组合在一起并不那么明显。
以下是我到目前为止的理解(还有一些我希望填补的空白):
find_nodes在我的引导节点上使用find_nodes向选定的人发出并将他们的回复添加到我的树中announce_peer带有 an 的info_hash信息,我应该将其信息保存在本地数据库上(发送者的 info_hash 和 ip/端口)get_peers与info_hash我数据库中的节点一起使用,那么我发送信息,否则我应该发送我自己的树中更接近的节点列表(最接近该 info_hash)get_peers在其他节点上使用时,我将收到对等点或节点,在后一种情况下,我认为这些节点更接近,info_hash而不是我自己的nodeId,所以,我应该将这些节点添加到我的树中还是基于它们启动一个新树?info_hash我应该在任何地方使用还是只在更接近目标的announce_peer节点上使用?距离多少才算足够近?nodeIdinfo_hash此时我有很多ID与我自己的ID更接近的节点,而有关info_hash的信息我并不真正感兴趣。
我担心我有一个巨大的愚蠢问题:我为什么这么做?
我的意思是:我做所有这些工作的自私原因是找到我感兴趣的 info_hash 的对等点。我知道一个 info_hash 的信息可能保存在 ID 更接近该 info_hash 的节点上。因此,如果我创建一棵更接近 info_hash 而不是更接近我自己的 ID 的节点树,我找到其信息的机会就会更大(此时,如果您知道主题,您已经注意到我有多么迷失)。
我应该创建多棵树吗?一棵适合我(保存人们发送给我的更接近我的nodeID的info_hashes信息),另一棵更接近我的目标info_hashes的信息,以便我可以检索他们的信息?
我是否应该创建一棵更接近我的节点 ID 的树,并在查询该树以获得我需要的 …
我对bittorrent中的位字段消息有点困惑。我已经注意到下面问题形式的混乱。
握手序列完成后立即发送的位字段
我假设这是强制性的,即握手后必须遵循位字段消息。正确的?
位域消息只能在握手序列完成后、发送任何其他消息之前立即发送
假设我清楚地阅读了此消息,尽管它是可选消息。对等方仍然可以在任何消息(如请求、choke、uncoke 等)之前广播位字段消息。正确的 ?
如果我是正确的,位字段代表状态,即对等方是否拥有给定的块。
假设我的位域是[1,1,1,1,1,1,1,1,1,1 ..]. 我确定对等点丢失了第 10 块,如果位字段看起来像这样,[1,1,0,1,1,1,1,1,1,1 ..]则对等点丢失了第 3 块。那么第一个字节的高位对应的片索引0意味着什么。
末尾的备用位设置为零
这是什么意思 ?我的意思是,如果末尾有一个位为 0,并不意味着同行将其作为缺失的部分。为什么使用备用位。
我对此的预感是,位字段可以更轻松地找到合适的对等点,以了解对等点可用的信息,但我对此是否正确?
@Encombe
这是我的位字段有效负载的样子
\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF \xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF \xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF \xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF \xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF \xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFE
我正在用 Java 构建一个 BitTorrent 客户端应用程序,我有两个小问题:
n文件(不是目录 - 为简单起见),我是否需要创建n具有相应大小的文件?当我从同行那里收到一个片段时,我如何知道它(该片段)属于哪个文件?例如,这是一个包含 2 个文件的 torrent:
TorrentInfo{Created By: ruTorrent (PHP Class - Adrien Gibrat)
Main tracker: http://tracker.hebits.net:35777/tracker.php?do=announce&passkey=5d3ab309eda55c1e7183975099958ab2
Comment: null
Info_hash: c504216ca4a113d26f023a10a1249ca3a6217997
Name: Veronica.2017.1080p.BluRay.DTS-HD.MA.5.1.x264-HDH
Piece Length: 16777216
Pieces: 787
Total Size: null
Is Single File Torrent: false
File List:
TorrentFile{fileLength=13202048630, fileDirs=[Veronica.2017.1080p.BluRay.DTS-HD.MA.5.1.x264-HDH.mkv]}
TorrentFile{fileLength=62543, fileDirs=[Veronica.2017.1080p.BluRay.DTS-HD.MA.5.1.x264-HDH.srt]}
Run Code Online (Sandbox Code Playgroud)
文档没有说太多:https : //wiki.theory.org/index.php/BitTorrentSpecification
我编写了一个 Telegram 机器人 (python-telegram-bot),我想知道是否有办法从该机器人打开应用程序。
更准确地说,机器人搜索 torrent 链接,最初的想法是将该链接直接发送到用户计算机中的 qBitTorrent,但不幸的是我陷入了这一步,所以目前我想给用户提供磁力链接,所以它可以粘贴到 qBitTorrent 应用程序中。问题是,如果能够从机器人自动打开应用程序,那就太棒了。
提前致谢!
bittorrent ×10
dht ×2
aria2 ×1
bit-fields ×1
c++ ×1
database ×1
download ×1
javascript ×1
kademlia ×1
node.js ×1
python ×1
python-3.x ×1
rss ×1
seed ×1
sockets ×1
sql ×1
sqlite ×1
torrent ×1
utorrent ×1