技术栈
你是一位熟悉 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 库。