簡介
將伺服器作為一個P2P節點,利用公用網路IP和大頻寬優勢來服務連不上其他節點的用戶端。採用master/worker架構,master負責建立和調度worker行程,worker行程負責實際執行「做種」,每個worker只能為一個頻道做種,一個頻道可以由多個worker同時做種。
伺服器選型
每個worker行程可以服務最多200個用戶端,大概占用一個cpu核心、400MB記憶體以及200Mbps頻寬,隨選業務還需要足夠快取內容的磁碟空間,可以參考控制台顯示的熱門頻道數量來選擇合適的伺服器規格,作業系統暫時只支援Linux。
Linux發行版要求
- Ubuntu不低於20
- CentOS不低於8
SDK版本要求
Web HLS SDK版本號 >= 2.7.0
Android SDK版本號 >= 3.4.0
安裝程式
自動安裝
以監聽連接埠8080為例:
wget -qN https://cdn.swarmcloud.net/super-peer.sh && bash super-peer.sh --port 8080手動安裝
安裝node.js
如果已經安裝node.js,請忽略此步驟
wget https://npmmirror.com/mirrors/node/v18.15.0/node-v18.15.0-linux-x64.tar.xz
tar -xvf node-v18.15.0-linux-x64.tar.xz
sudo mkdir -p /usr/local/nodejs
sudo mv node-v18.15.0-linux-x64/* /usr/local/nodejs/
sudo ln -s /usr/local/nodejs/bin/node /usr/local/bin
sudo ln -s /usr/local/nodejs/bin/npm /usr/local/bin下載超級節點程式
wget https://cdn.swarmcloud.net/super-peer.zip
unzip super-peer.zip啟動超級節點
以監聽連接埠8080為例:
cd super-peer && echo listenPort=8080 >> .envpm2是一個Node應用程式行程管理器,用於超級節點的行程守護:
npm i -g pm2
sudo ln -s /usr/local/nodejs/bin/pm2 /usr/local/bin
pm2 start index.js -n super-peer綁定超級節點
登入控制台,依序點擊 P2P設定 -> 超級節點管理 -> +超級節點,輸入伺服器url位址(http://ip:port)和頻寬大小等資訊,點擊確定即可。 如果伺服器狀態顯示「已停止」,表示連線不上伺服器,請檢查各個步驟是否正確,並確保防火牆設定正確。
WARNING
直播模式下,超級節點只能服務直線距離7000公里內的用戶端,請選擇盡量接近使用者的伺服器來部署。
信令設定
如果您的應用程式在控制台設定了信令,需要為超級節點網域也設定相同的信令位址。
做種策略
預設情況下調度伺服器會根據當前熱門頻道排序來自動做種,您也可以關閉自動做種,在超級節點管理頁面上方輸入播放位址來產生Base64,點擊「做種」按鈕並輸入相關資訊即可。
監控超級節點
在超級節點管理頁面點擊對應伺服器的監控按鈕,即可查看每個worker行程的連線節點數、上傳流量(單位KB)、系統資源使用情況等資訊,也可以重新啟動或終止某個worker行程。
設定存取token (可選)
可以在啟動程式前先執行以下指令碼來建立AccessToken:
echo 'accessToken=ACCESS_TOKEN' >> .env其中ACCESS_TOKEN是你自訂的token,需要確保與在後台綁定超級節點時設定的AccessToken一致。
設定信令位址 (可選)
除了可以在控制台設定信令位址外,還可以透過 .env 檔案來設定,實現在不同地區使用不同的信令位址:
echo 'signal1=wss://example.com' >> .env
# echo 'signal2=wss://example2.com' >> .env其中signal1是主信令位址,signal2是備用信令位址。
開機自動啟動 (可選)
在啟動程式後,用以下指令碼實現開機自動重新啟動行程:
pm2 save && pm2 startup更新超級節點 (可選)
先替換檔案,然後重新啟動程式:
wget -N https://cdn.swarmcloud.net/super-peer.zip && unzip -o super-peer.zip
pm2 restart super-peer
pm2 save也可以直接執行命令:
wget -qN https://cdn.swarmcloud.net/super-peer.sh && bash super-peer.shRestful API
HTTP請求標頭
| 參數名 | 參數類型 | 描述 | 是否必要 |
|---|---|---|---|
| X-ACCESS-TOKEN | string | 存取token,需要與超級節點啟動時設定的一致 | 否 |
Ping
檢查連通性,同時可以設定頻寬或worker數量
POST /ping請求主體
| 參數名 | 參數類型 | 描述 | 是否必要 |
|---|---|---|---|
| bandwidth | int | 伺服器頻寬大小,單位Mbps | 否 |
| workers | int | 強制指定worker行程數量 | 否 |
回應
| 參數名 | 參數類型 | 描述 |
|---|---|---|
| workers | int | 目前workers行程數量 |
Seed
向超級節點發送做種資訊
POST /seed請求主體
| 參數名 | 參數類型 | 描述 | 是否必要 |
|---|---|---|---|
| list | array | 做種資訊清單 | 是 |
請求主體範例:
{
"list": [
{
"token": 使用者token
"channel": 頻道ID(Base64編碼)
"trackerZone": tracker所在地區(cn, hk, us)
"live": 是否直播
"signal1": 主信令位址
"signal2": 備用信令位址
"priority": 做種優先權
"keepAlive": 是否常駐
"noUseDiskCache": 隨選不使用磁碟快取
"maxConnections": 最大P2P連線數,預設80
"label": 自訂超級節點標籤
}
]
}回應
Status: 200
Stats
請求所有即時統計資訊
GET /stats請求某個worker的統計資訊
GET /stats/:pid其中pid是worker的行程id
請求某個channelId的統計資訊
GET /stats/:channelId其中channelId是頻道ID的base64編碼
停止所有worker
POST /stop_all停止某個worker
POST /stop/:pid重新啟動所有worker
POST /restart_all重新啟動某個worker
POST /restart/:pid