Skip to main content

Go

torrent-web-seeder Server 端代码阅读

·941 words·5 mins
torrent-web-seeder 是 Webtor 体系里的一个 BitTorrent 到 HTTP 的网关服务。它的目标不是做一个普通 BT 下载器,而是把 torrent 中的文件变成 HTTP 可访问资源:客户端请求某个 info-hash/path,server 端按需加入 BitTorrent 网络下载对应 piece,并把数据通过 HTTP 流式返回出去。 这篇记录一次代码阅读结果,重点放在 server 端:它怎么启动、请求怎么走、torrent 怎么被加载和回收、mmap 存储层为什么复杂,以及实际运行时应该带哪些参数。

在 Go 里用 libarchive 写一个接近 bsdtar 的归档器

·649 words·4 mins
这篇只是记一下最近用 Go 包 libarchive 的思路。 目标很普通:把一个目录打成 tar.zst,解包时也尽量保留原来的文件系统语义。真正费时间的地方不在遍历目录,而是各种边角:非 ASCII 文件名、软链接、硬链接、稀疏文件、设备节点、权限、owner、xattr,还有一些错误只会在 close 阶段冒出来。 如果只用 Go 标准库 archive/tar 手写,普通文件当然很快能跑通,但后面大概率会变成不断补特例。所以我最后还是把 libarchive 当成底层实现,行为尽量贴近 bsdtar。