xbox 高速下載不是夢想

最近幾周 xbox 上下載游戲總是出現(xiàn)安裝已停止或者下載速度緩慢的問題,網上搜了個遍,大體上是以下幾種辦法
更換 DNS
清除 xbox 的 mac 地址
使用加速器(然鵝我這里 UU 加速器反向加速)
使用 xbox 下載助手(力薦,應該能解決大部分的問題)
我家能下載你家不能下載所以請你換個寬帶或者來貼吧撕逼
我在使用 xbox 下載助手的過程中仍然會出現(xiàn)下載已停止的情況,咨詢作者得知,有比較大概率是國內的 DNS 污染或者運營商緩存了過期文件,導致國內下載到的文件是損壞的。
那么一種解決辦法呼之欲出: 使用國際域名下載之后設法回傳給 xbox (回傳功能與獲取下載鏈接的功能 xbox 下載助手已內置)
你不想折騰的話,可以到此止步了。xbox 下載助手能解決大部分人的問題。
本文主要是從折騰的角度來獲取下載鏈接和回傳給 xbox 。
如何獲取下載鏈接
獲取下載鏈接最簡單的辦法是在 xbox 下載助手里面將國際下載域名和國內下載域名都設置為運行下載助手的電腦的IP地址,并且開啟 xbox 下載助手的 http 服務,這樣xbox嘗試下載游戲時就會訪問到下載助手的服務,下載助手會將下載鏈接以 404 的標識顯示。
xbox 的下載鏈接是 http 而不是 https 的,這就為我們回傳游戲文件提供了可能性。
我的思路是,電腦 A 作為下載游戲的中轉,把 xbox 下載鏈接的請求原封不動的發(fā)給服務器,再將服務器的響應原封不動的返回給 xbox,這樣我們就能在 xbox 上拿到下載鏈接了。
那么我們如何做一個這樣的中轉http請求的軟件呢?
這里我使用搜狗公司的 workflow 框架 (https://github.com/sogou/workflow)?來完成我的需求。
對官方的 http 代理服務器略作修改,就可以達到我的目的了。
我修改的地方是
這樣就可以把程序作為中轉了。
將上面的代碼聯(lián)和 workflow 框架,編譯出程序來。監(jiān)聽80端口。假設運行在電腦A上,使用 xbox 下載助手將 Xbox 的下載域名對應的IP改為電腦A的IP。這樣xbox下載游戲時,就會經過電腦A的中轉。
下圖是下載刺客信條奧德賽的截圖

xbox 經過電腦A的中轉時,我們就可以把下載鏈接取到了,比如這里刺客信條奧德賽的國際域名下載鏈接是
在電腦上使用IDM或者直接用瀏覽器之類的訪問這個鏈接,就可以把整個游戲的單個文件下載到了。
拿到下載鏈接之后,在 xbox 上暫停下載。
如何回傳給 xbox?
簡單來講,你需要一個支持 Accept-Range: bytes 的 web?服務器,你當然可以用 xbox 下載助手實現(xiàn)此功能。這里我使用了 nginx (?http://nginx.org/download/nginx-1.20.2.zip )
解壓之后,打開文件內 conf/nginx.conf,大概 40 行左右,也即 server {xxxx} 的大括號范圍內。添加一行?add_header Accept-Ranges bytes;? 也就是下面的樣子
回頭看下載鏈接?
下載鏈接中?ACDWW3981F5C7_1.5.6.2976_x64__b6krnev7r9sf8 是文件名,"13/77fb3ed5-9764-4993-81be-885f11bde63f/ba400e4b-6aa2-48e5-865d-fc247f053952/1.5.6.2976.c6a52c95-b179-489b-a366-d1c822ce2e94/" 則是保存路徑,在 nginx 的html 文件內,依次新建目錄?13 -->?77fb3ed5-9764-4993-81be-885f11bde63f -->??ba400e4b-6aa2-48e5-865d-fc247f053952? -->??1.5.6.2976.c6a52c95-b179-489b-a366-d1c822ce2e94 ,然后把下載好的游戲文件放在?1.5.6.2976.c6a52c95-b179-489b-a366-d1c822ce2e94 目錄里。
使用 cmd 進入 nginx 的目錄,輸入 start nginx.exe 。 再回到 xbox 繼續(xù)下載。此時 xbox 將訪問的是 nginx 啟動的 web 服務器。我的 Xbox one x 上可以的 450Mbps 以上的速度。xbox 自己直連國際域名的話只能跑到 20Mbps 左右。在電腦上使用 IDM 可以跑滿帶寬。

我的局域網帶寬是能跑到千兆的,我給 xbox 換了內置硬盤之后,USB 往內置硬盤里拷貝持續(xù)寫入速度可以超過 1.5Gbps。也就是說,xbox 換了硬盤之后持續(xù)寫入速度可以到 1.5Gbpx。?但是實際上通過局域網回傳給 xbox 最高只能跑到 550Mbps ,也許是 xbox one x 的辣雞 CPU 限制了發(fā)揮,有 xss 或者 xsx 的同學可以試試局域網回傳速度能到多少。
局域網回傳仍然會出現(xiàn)安裝已停止的情況的話,多半是下載到的游戲文件本省就有損壞,這種情況可以加速器或者用 xbox 下載助手,讓 xbox 走國際域名下載一會,把損壞的區(qū)塊從服務器上下載到之后,再用局域網回傳給 xbox 。
P.S 本文只是折騰用,展示 workflow 和 nginx 的一種用法,對于多數(shù)人來說,xbox 下載助手是最好的選擇。
稍微不那么折騰的辦法
撇開 workflow ,我們也可以用 nginx 獲取下載鏈接。將 xbox 的下載域名指向運行了 nginx 的電腦之后,xbox 發(fā)起下載請求,就可以在運行了 nginx 的電腦上的 nginx 的log 里拿到下載鏈接。這里可以參考我修改過的 nginx.conf
這個 config 的主要作用是由下面這段產生的
主要作用是接收到 符合 xbox 下載鏈接形式的請求時,如果請求的文件不存在,那么將請求轉發(fā)給 http://assets1.xboxlive.cn 處理。使用 xbox 下載助手或者別的什么方式,將xbox的下載域名指向運行 nginx 的電腦,然后在 nginx 的 access.log 里面就可以看到請求了,下面是下載茶杯頭的示例。
在 xbox 上暫停下載。拿到下載鏈接之后使用 IDM 或者別的支持多線程下載的 PC 端的軟件將游戲文件下載到 nginx 的 html 目錄里面。下載完成之后,xbox 點恢復下載,這個時候 nginx 檢測到本地存在對應的游戲文件,那么就會從電腦本地傳輸給 xbox 。
使用 nginx 回傳的原因是 xbox 下載助手的回傳速度還是比 nginx 慢一點。
nginx 作為靜態(tài)文件web服務器來說效率還是相當高的。