技术栈

你是一位熟悉 GoLang、Postgres、TypeScript/Angular 或 BitTorrent 协议的开发者吗?目前我是唯一的开发者,同时有全职工作和许多其他事务,这个项目是我在业余时间开发的,已经持续了几个月。这个项目太大了,一个人难以完成!如果你有兴趣参与,请查看 open issues,欢迎随时提交 PR!

Postgres

Postgres 是主要的数据存储,支持搜索引擎和消息队列。这些功能依赖于多个 Postgres 特有的特性和扩展,因此支持其他存储引擎会比较复杂,目前不是优先事项。

GoLang 后端

主要使用的库包括:

  • anacrolix/torrent:目前用得不多,但包含许多有用的 BitTorrent 工具,未来可用于实现如原地做种等功能
  • fx:用于依赖注入和应用生命周期管理
  • gin:HTTP 服务器
  • goose:数据库迁移
  • gorm:数据库访问
  • gqlgen:GraphQL 服务器实现
  • rex:正则表达式库,使复杂的分类正则表达式更易管理
  • urfave/cli:命令行接口
  • zap:日志记录

TypeScript/Angular Web UI

使用 Angular Material 组件。Web UI 被嵌入到 GoLang 二进制文件中,并由 Gin Web 框架提供服务,因此构建产物会提交到仓库。

Nix 开发环境

仓库内包含 Nix shell,可提供可复现的开发环境。只需安装 Nix,然后运行 nix develop(推荐使用 nix-direnv 自动加载 shell)。

其他工具

  • 仓库包含一个 Taskfile,内含多种实用开发脚本
  • 使用 GitHub Actions 进行 CI、构建 Docker 镜像和本网站

DHT 爬虫的架构与生命周期

DHT 和 BitTorrent 协议的文档(较为晦涩)可在 bittorrent.org 查阅。相关资源包括:

我对 DHT 爬虫实现的理解主要参考了 已归档的 magnetico 项目anacrolix 的 BitTorrent 库