admin管理员组文章数量:1530815
2024年2月16日发(作者:)
使用erlang实现P2P磁力搜索(开源)
接上回对DHT网络的研究,我用erlang克隆了一个磁力搜索引擎。我这个实现包含了完整的功能,DHT网络的加入、infohash的接收、种子的获取、资源信息的索引、搜索。
如下图:
在我的笔记本上,我开启了100个DHT节点,大致均匀地分布在DHT网络里,资源索引速度大概在1小时一万个左右(包含重复资源)。
这个程序包含三大部分:
DHT实现,kdht,/kevinlynx/kdht基于该DHT实现的搜索引擎,dhtcrawler,/kevinlynx/dhtcrawler,该项目包含爬虫部分和一个简单的WEB端
这两个项目总共包含大概2500行的erlang代码。其中,DHT实现部分将DHT网络的加入包装成一个库,爬虫部分在搜索种子时,暂时没有使用P2P里的种子下载方式,而是使用现成的磁力链转种子的网站服务,这样我只需要使用erlang自带的HTTP客户端就可以获取种子信息。爬虫在获取到种子信息后,将数据存储到mongodb里。WEB端我为了尽量少用第三方库,我只好使用erlang自带的HTTP服务器,因
此网页内容的创建没有模板系统可用,只好通过字符串构建,编写起来不太方便。
使用
整个程序依赖了两个库:bson-erlang和mongodb-erlang,但下载依赖库的事都可以通过rebar解决,项目文件里我已经包含了rebar的执行程序。我仅在Windows7上测试过,但理论上在所有erlang支持的系统上都可以。
下载安装mongodb进入mongodb bin目录启动mongodb,数据库目录保存在db下,需手动建立该目录
mongod --dbpath db --setParameter
textSearchEnabled=true
下载erlang,我使用的是R16B版本下载dhtcrawler,不需要单独下载kdht,待会下载依赖项的时候会自动下载
git clone git@:kevinlynx/
cmd进入dhtcrawler目录,下载依赖项前需保证环境变量里有git,例如D:Program Files (x86)Gitcmd,需注意不要将bash的目录加入进来,使用以下命令下载依赖项
rebar get-deps
编译
rebar compile
在dhtcrawler目录下,启动erlang
erl -pa ebin
在erlang shell里运行爬虫,erlang语句以点号(.)作为结束
crawler_app:start().
erlang shell里运行HTTP服务器
crawler_http:start().
浏览器里输入localhost:8000/,这个时候还没有索引到资源,建议监视网络流量以观察爬虫程序是否正确工作
爬虫程序启动时会读取priv/配置文件,该文件里配置了DHT节点的UDP监听端口、节点数量、数据库地址等,可自行配置。
接下来我会谈谈各部分的实现方法。
原文地址:
/2013/06/20/magnet-search/
written by Kevin Lynx
posted at
版权声明:本文标题:使用erlang实现P2P磁力搜索(开源) 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dianzi/1708039744a213019.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论