通过webseeding选择性下载种子

时间:2013-01-15 00:56:50

标签: java http jetty p2p libtorrent

我从Jetty网络服务器提供文件,目前可通过常规HTTP GET下载。

但是,我对P2P模型感兴趣,用户可以通过webseeding下载文件。如何在具有libtorrent的Jetty服务器的环境中实现?

其次,我不想永远“播种”Jetty网络服务器上的所有文件,而我只希望能够“按需”播种文件。 例如,我不希望盲目播种一个洪流,我希望该文件可用于请求(如通过GET或webseeding或其他任何方式) - 它可以“播种”。

我想按需播种或上传,因为我有大量文件,不知道我是否能同时播种成千上万的文件。顺便说一下,谁能知道可以同时播种的文件数量的上限是多少?

1 个答案:

答案 0 :(得分:2)

关于libtorrent部分的相关文档在这里:http://www.rasterbar.com/products/libtorrent/manual.html#http-seeding,规范是http://bittorrent.org/beps/bep_0019.htmlhttp://bittorrent.org/beps/bep_0017.html(两者都得到libtorrent的支持,如“url seeds”和“http seeds” )。

IIRC,BEP19(webseeds或urlseeds)在服务器POV中相当简单,你不需要做任何特别的事情 - 你只需像普通的HTTP那样提供文件服务对该文件的请求(因此,问题的第二部分在这里没有意义)。

使用BEP17,您宁愿使用唯一的http端点,并传递它获取参数以指定客户端想要的内容(例如,允许更好的限制控制和范围选择)(例如:http://example.com/seed/?info_hash=X&piece=Y&ranges=Z)。

如果您打算对下载的内容进行更多(程序化)控制,则第二种方法更灵活,但显然需要编写更多代码来处理请求。

同样,从服务器POV来看,这与常规HTTP事务没有什么不同,并且这里没有关于“种子”的特殊之处。您只需提供文件(每个文件都有自己的URL,可以直接或通过处理程序)。

对于元数据部分,使用BEP19,您添加“url-list”扩展名(包含文件的完整网址:http://example.com/seeds/SOMEFILE.txt - 注意多文件种子),而BEP17使用密钥“httpseeds”(使用您的终端,例如:http://example.com/seed/)。

根据您的Jetty是否也处理元数据生成,您可能更喜欢BEP19而不是BEP17,因为您的网址更易于预测/元数据生成更简单...

希望有所帮助。

相关问题