一個加速大量小檔案下載的工具
此專案是源自於之前玩的遊戲,他會在更新版本時下載大量的小文件,但是沒有任何優化所以速度非常的慢,故想到有沒有辦法優化一下大量小文件的下載場景簡單構思後想到,既然下載速度慢是因為小檔案太多,那就把他們都拼成一個大檔案就好了,畢竟大檔案的下載速度理論上可以跑滿頻寬!
專案的原理就是將大量的小文件直接連結成一個區塊文件,然後產生一份catalog,客戶端透過catalog下載區塊文件並依據文件大小和路徑在本地還原文件並且基於HTTP Range
的特性,還可以實現斷點重連和下載某個檔案的功能
前往Releases下載最新的客戶端和服務端二進位構建
部署服務端
將二進位檔案放置到任意目錄,並在同級目錄建立一個assets
資料夾
將需要加速下載的小檔案放置到assets
資料夾內的任意資料夾,例如assets/example
啟動服務端,服務端啟動時會自動按照assets
目錄下的所有子資料夾為單位建立打包文件,並為他們建立catalog.json
服務端提示Server started at http://0.0.0.0:8080
即為啟動完成
透過客戶端下載文件
將二進位檔案放置到任意目錄
輸入client <CatalogAddr>
開始下載文件, <CatalogAddr>
為catalog.json
的下載地址,服務端啟動時會自動生成,假設你的服務端文件路徑是assets/example
,則catalog地址就為http://localhost:8080/example/catalog.json
下載的檔案會自動儲存在download
資料夾
建置需要Golang >= 1.22.2
安裝依賴
go mod tidy
建構服務端
go build ./cmd/server/
建構客戶端
go build ./cmd/client/
引入包
go get -u github.com/nijinekoyo/miyako
包使用說明
pkg/catalog
用於建立和解析catalog,API請查看文檔
pkg/block
用於產生文件區塊和下載文件區塊,API請查看文檔
本項目基於MIT License
協議分發