写了个 java 版的 DHT 爬虫..半成品 ←_← 有很多问题..

2015-10-06 00:40:36 +08:00
 flamhaze5946

用 findnodes 找到的节点几乎都无法访问, 不知道是不是解析 node 信息的时候出了问题.
把 Node 放到 Bucket 中,当 Bucket 满了后会进行 Bucket 分裂操作,目前的做法是,每个 Bucket 中最多可以放 8 个 Node,分裂规则是第一个 Bucket 的 nodeIdMax = 2 ^ 160, nodeIdMin = 0,第一次分裂变为两个 Bucket,第一个 Bucket 的 nodeIdMax = 2 ^ 160 / 2, nodeIdMin = 0,第二个 Bucket 的 nodeIdMax = 2 ^ 160, nodeIdMin = 2 ^ 160 / 2 + 1,简单的说就是平均分为两个区间~这样做某些情况会产生很多空的 Bucket,例如 id[] = {1, 2, 3, 4, 5, 6, 7, 8, 9}的情况....

求建议要怎么样才能做出一个像样的 DHT 爬虫, 还有 Bucket 的分裂方法有没有什么好的方案.
代码中有什么可以改进的地方, 谢啦~~

github 地址
https://github.com/flamhaze5946/DHTSpider

5539 次点击
所在节点    分享创造
9 条回复
whywhy36
2015-10-06 05:20:32 +08:00
前段时间无聊,写了一套 DHT 爬虫, torrent parsing 加上搜索前端网站,不过主要是用 Ruby, 并且用 Redis 作为中间存储的, Postgres 作为最终最终存储并且提供文本搜索的。跑起来之后效率还是不错的。

爬虫: https://github.com/whywhy36/DHTDigger
简单的半成品网站,提供搜索和多数据源输入: https://github.com/whywhy36/SearchMagnet

两个都是半成品,但是核心功能都在了。其中爬虫部分您可以大概看下,希望有帮助 :-)
pagxir
2015-10-06 11:29:34 +08:00
> 这样做某些情况会产生很多空的

基本不会产生空的 bucket, 如果大概率产生了,说明你的实现有问题。因为一旦需要分裂,那么新分离出两个 bucket 需要存 9 个 node 的。而 bucket 仅能存 8 个,所以另外一个至少有 1 个 node.

你举例是个特例,实际上是不会出现的。因为 node 的 update 基本上是随机的,所以能比较平均的落入 bucket 中。如果出现你所说的情况,你需要在这个 node tables 中对落入这 bucket 空间的一个随机 nodeid 执行 findnode 操作。
laotaitai
2015-10-06 12:20:20 +08:00
既然是要写专业的 DHT 爬虫, 那么就不要太遵守 DHT 协议了, 只要了解了本质, 就跟功夫一样, 本质就是拿来杀人, 舞来舞去的花招都比不上一个直拳来得简单粗暴. 所以, 什么 bucket, 分裂什么的, 都是拿给下载工具去遵守的.

看看这家伙写的:
Python 版:
http://t.cn/RyYmooB

Ruby 版:
http://t.cn/RyYmQ4c

他还有个 NodeJS 版, 不过弃坑了, 里面很多代码都是"假"的, 不建议看. 我最喜欢 Ruby 版的, 简洁优美, 代码写得有点生涩, 效果还是很不错的. 如果你实现了 DHT 爬虫部分, 不满足于单纯的 infohash, 进一步想从 DHT 网络里下载种子的 metadata 部分, 就去看看 NodeJS 版里的有个 issue, 他建议了要实现这个从 DHT 下载 metadata 的功能, 需要看什么文档.

你搞 Java 的, 看懂这俩个语言应该是小 case 吧?
flamhaze5946
2016-05-23 09:41:30 +08:00
@whywhy36 非常感谢, 最近我会看看实现的~~接下来看看能不能整合到我的项目中去~~
flamhaze5946
2016-05-23 09:42:49 +08:00
@pagxir 好的, 随机性好的话应该是没问题的, 到时候我测试一下, 非常感谢!!!
flamhaze5946
2016-05-23 09:44:12 +08:00
@laotaitai 谢谢推荐~~准备把他的代码研究一下, 看看我现阶段是哪里实现错了所以才一直连接不上其它节点..
unique
2016-08-08 16:23:09 +08:00
楼主还在维护这个项目吗?
flamhaze5946
2016-09-18 10:35:48 +08:00
@unique 暂时没有了, 最近搞 rpc 比较忙
summerLast
2017-10-09 18:16:34 +08:00
你好 有什么好的学习资料吗 比较感兴趣

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/225815

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX