Skip to content

簡介

將伺服器作為一個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為例:

sh
wget -qN https://cdn.swarmcloud.net/super-peer.sh && bash super-peer.sh --port 8080

手動安裝

安裝node.js

如果已經安裝node.js,請忽略此步驟

sh
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

下載超級節點程式

sh
wget https://cdn.swarmcloud.net/super-peer.zip
unzip super-peer.zip

啟動超級節點

以監聽連接埠8080為例:

sh
cd super-peer && echo listenPort=8080 >> .env

pm2是一個Node應用程式行程管理器,用於超級節點的行程守護:

sh
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:

sh
echo 'accessToken=ACCESS_TOKEN' >> .env

其中ACCESS_TOKEN是你自訂的token,需要確保與在後台綁定超級節點時設定的AccessToken一致。

設定信令位址 (可選)

除了可以在控制台設定信令位址外,還可以透過 .env 檔案來設定,實現在不同地區使用不同的信令位址:

sh
echo 'signal1=wss://example.com' >> .env
# echo 'signal2=wss://example2.com' >> .env

其中signal1是主信令位址,signal2是備用信令位址。

開機自動啟動 (可選)

在啟動程式後,用以下指令碼實現開機自動重新啟動行程:

sh
pm2 save && pm2 startup

更新超級節點 (可選)

先替換檔案,然後重新啟動程式:

sh
wget -N https://cdn.swarmcloud.net/super-peer.zip && unzip -o super-peer.zip
pm2 restart super-peer
pm2 save

也可以直接執行命令:

sh
wget -qN https://cdn.swarmcloud.net/super-peer.sh && bash super-peer.sh

Restful API

HTTP請求標頭

參數名參數類型描述是否必要
X-ACCESS-TOKENstring存取token,需要與超級節點啟動時設定的一致

Ping

檢查連通性,同時可以設定頻寬或worker數量

sh
POST /ping

請求主體

參數名參數類型描述是否必要
bandwidthint伺服器頻寬大小,單位Mbps
workersint強制指定worker行程數量

回應

參數名參數類型描述
workersint目前workers行程數量

Seed

向超級節點發送做種資訊

sh
POST /seed

請求主體

參數名參數類型描述是否必要
listarray做種資訊清單

請求主體範例:

json
{
    "list": [
        {
            "token": 使用者token
            "channel": 頻道ID(Base64編碼)
            "trackerZone": tracker所在地區(cn, hk, us)
            "live": 是否直播
            "signal1": 主信令位址
            "signal2": 備用信令位址
            "priority": 做種優先權
            "keepAlive": 是否常駐
            "noUseDiskCache": 隨選不使用磁碟快取
            "maxConnections": 最大P2P連線數,預設80
            "label": 自訂超級節點標籤
        }
    ]

}

回應

Status: 200

Stats

請求所有即時統計資訊

sh
GET /stats

請求某個worker的統計資訊

sh
GET /stats/:pid

其中pid是worker的行程id

請求某個channelId的統計資訊

sh
GET /stats/:channelId

其中channelId是頻道ID的base64編碼

停止所有worker

sh
POST /stop_all

停止某個worker

sh
POST /stop/:pid

重新啟動所有worker

sh
POST /restart_all

重新啟動某個worker

sh
POST /restart/:pid

粤ICP备18075581号