项目作者: zpqsunny

项目描述 :
DHT Spider
高级语言: Java
项目地址: git://github.com/zpqsunny/dht.git
创建时间: 2019-09-16T13:11:45Z
项目社区:https://github.com/zpqsunny/dht

开源协议:Apache License 2.0

下载


DHT 网络爬虫

GitHub
GitHub release (latest by date)





架构设计

DHT Server -> Redis

Redis <- Peer -> (Mongodb && local)

模块解释

  • dht-common 公共变量和方法
  • dht-fresh hash的7天内统计日活跃数
  • dht-krpc krpc 协议实现
  • dht-peer Peer 客户端实现(TCP),实现端与端之间的数据交互,来实现获取对端的metadata数据和存储
  • dht-routing-table 为dht-server 实现的内部路由表
  • dht-server 负责基于UDP传输协议的DHT网络传输Bencode编码的服务器

config.properties 配置文件

DHT Server

  1. server.port=6881 #监听端口
  2. server.nodes.min=20 #node节点最少数量
  3. server.nodes.max=3000 #node节点最大数量
  4. server.findNode.interval=60 #执行find_node方法时间间隔(单位秒)
  5. server.ping.interval=300 #执行ping方法时间间隔(单位秒)
  6. server.removeNode.interval=300 #执行删除失效节点时间间隔(单位秒)
  7. server.fresh=false #是否开启hash统计 需要开启fresh 不然redis list数据会被占满
  8. redis.host=127.0.0.1 #redis地址
  9. redis.port=6379 #redis端口
  10. redis.password= #redis密码
  11. redis.database=0 #redis Database

Peer

  1. peers.core.pool.size=5 #peer核心线程数
  2. peers.maximum.pool.size=10 #peer最大线程数
  3. redis.host=127.0.0.1 #redis地址
  4. redis.port=6379 #redis端口
  5. redis.password= #redis密码
  6. redis.database=0 #redis Database
  7. mongodb.url= #mongodb url

实现协议

:heavy_check_mark: DHT Protocol

:heavy_check_mark: Extension for Peers to Send Metadata Files

:heavy_check_mark: Extension Protocol

运行

jar包和config.properties配置文件要在同一目录

```shell script
java -jar dht-server-1.0-SNAPSHOT-jar-with-dependencies.jar &
java -jar dht-peer-1.0-SNAPSHOT-jar-with-dependencies.jar &

  1. ## Docker
  2. 运行在Docker
  3. [dht-server](https://hub.docker.com/repository/docker/zpqsunny/dht-server)
  4. [dht-peer](https://hub.docker.com/repository/docker/zpqsunny/dht-peer)
  5. ### ENV 环境变量配置
  6. #### DHT Server
  7. ```properties
  8. PORT = 6881 #端口
  9. MIN_NODES = 20 #node节点最少数量
  10. MAX_NODES = 5000 #node节点最大数量
  11. FRESH = false #是否开启hash统计 需要开启fresh 不然redis list数据会被占满
  12. REDIS_HOST = 127.0.0.1 #redis地址
  13. REDIS_PORT = 6379 #redis端口
  14. REDIS_PASSWORD = '' #redis密码
  15. REDIS_DATABASE = 0 #redis Database

DHT Peer

  1. REDIS_HOST = 127.0.0.1 #redis地址
  2. REDIS_PORT = 6379 #redis端口
  3. REDIS_PASSWORD = '' #redis密码
  4. REDIS_DATABASE = 0 #redis Database
  5. MONGODB_URL = 'mongodb://localhost' #mongodb url

快速运行

docker

  1. docker run -d --name redis --network host redis:5.0.10
  2. docker run -d --name dht-server --network host zpqsunny/dht-server:latest
  3. docker run -d --name mongo --network host -v /docker/mongo/db:/data/db -e MONGO_INITDB_ROOT_USERNAME=admin -e MONGO_INITDB_ROOT_PASSWORD=admin mongo:4.4.1
  4. docker run -d --name dht-peer --network host -v /metadata:/metadata -e MONGODB_URL="mongodb://admin:admin@127.0.0.1:27017/?authSource=admin" -e REDIS_HOST=127.0.0.1 -e REDIS_PORT=6379 zpqsunny/dht-peer:latest

docker-compose

  1. services:
  2. redis:
  3. container_name: redis
  4. image: redis:5.0.10
  5. network_mode: host
  6. restart: unless-stopped
  7. dht-server-1: &dht-server
  8. depends_on:
  9. - redis
  10. image: zpqsunny/dht-server:latest
  11. build:
  12. context: dht-server
  13. dockerfile: Dockerfile
  14. network_mode: host
  15. restart: unless-stopped
  16. environment:
  17. PORT: 6881
  18. REDIS_HOST: 127.0.0.1
  19. REDIS_PORT: 6379
  20. REDIS_PASSWORD:
  21. REDIS_DATABASE: 0
  22. dht-server-2:
  23. <<: *dht-server
  24. environment:
  25. PORT: 6882
  26. dht-server-3:
  27. <<: *dht-server
  28. environment:
  29. PORT: 6883
  30. mongo:
  31. container_name: mongo
  32. image: mongo:4.4.1
  33. volumes:
  34. - /docker/mongo/db:/data/db
  35. - /docker/mongo/backup:/backup
  36. environment:
  37. MONGO_INITDB_ROOT_USERNAME: admin
  38. MONGO_INITDB_ROOT_PASSWORD: admin
  39. network_mode: host
  40. restart: unless-stopped
  41. dht-peer:
  42. depends_on:
  43. - redis
  44. - mongo
  45. deploy:
  46. mode: replicated
  47. replicas: 3
  48. image: zpqsunny/dht-peer:latest
  49. build:
  50. context: dht-server
  51. dockerfile: Dockerfile
  52. network_mode: host
  53. restart: unless-stopped
  54. volumes:
  55. - /metadata:/metadata
  56. environment:
  57. MONGODB_URL: mongodb://admin:admin@127.0.0.1:27017/?authSource=admin
  58. REDIS_HOST: 127.0.0.1
  59. REDIS_PORT: 6379
  60. REDIS_PASSWORD:
  61. REDIS_DATABASE: 0
  1. docker-compose up

示例数据

example-data

Stargazers over time

Stargazers over time

鸣谢

IntelliJ IDEA 是一个在各个方面都最大程度地提高开发人员的生产力的 IDE,适用于 JVM 平台语言。

特别感谢 JetBrains 为开源项目(Open Source Projects)提供免费的 IntelliJ IDEA 等 IDE 的授权

IntelliJ IDEA logo