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
安卓SDK版本号 >= 3.4.0

安装程序

自动安装

以监听端口8080为例:

sh
wget -qN https://cdn.swarmcloud.net/super-peer.sh && bash super-peer.sh --port 8080
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
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
wget https://cdn.swarmcloud.net/super-peer.zip
unzip super-peer.zip

启动超级节点

以监听端口8080为例:

sh
cd super-peer && echo listenPort=8080 >> .env
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
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
echo 'accessToken=ACCESS_TOKEN' >> .env

其中ACCESS_TOKEN是你自定义的token,需要确保与在后台绑定超级节点时配置的AccessToken一致。

配置信令地址 (可选)

除了可以在控制台配置信令地址外,还可以通过 .env 文件来配置,实现在不同地区使用不同的信令地址:

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

其中signal1是主信令地址,signal2是备用信令地址。

开机自启动 (可选)

在启动程序后,用以下脚本实现开机自动重启进程:

sh
pm2 save && pm2 startup
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
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
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
POST /ping

请求体

参数名参数类型描述是否必须
bandwidthint服务器带宽大小,单位Mbps
workersint强制指定worker进程数量

响应

参数名参数类型描述
workersint当前workers进程数量

Seed

向超级节点发送做种信息

sh
POST /seed
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": 自定义超级节点标签
        }
    ]

}
{
    "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
GET /stats

请求某个worker的统计信息

sh
GET /stats/:pid
GET /stats/:pid

其中pid是worker的进程id

请求某个channelId的统计信息

sh
GET /stats/:channelId
GET /stats/:channelId

其中channelId是频道ID的base64编码

停止所有worker

sh
POST /stop_all
POST /stop_all

停止某个worker

sh
POST /stop/:pid
POST /stop/:pid

重启所有worker

sh
POST /restart_all
POST /restart_all

重启某个worker

sh
POST /restart/:pid
POST /restart/:pid

粤ICP备18075581号