简介
将服务器作为一个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为例:
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 >> .env
pm2是一个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.sh
Restful 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