Skip to main content

Server as Peer

Introduction​

This program makes server as a peer (Super Peer) to serve clients that cannot connect to other peers. The master/worker architecture is adopted. The master is responsible for creating and scheduling worker processes, and the worker process is responsible for executing "seeding". Each worker can only seed for one channel, and a channel can be seeded by multiple workers simultaneously.

Server Spec​

Each worker process can serve up to 200 viewers, requires approximately one CPU core, 400MB of memory, and 200Mbps of bandwidth, it also requires sufficient disk space to cache content for VOD.

Linux OS Requirement​

  • Ubuntu 20 or newer
  • CentOS 8 or newer

Install​

Install Automatically​

The script to start super peer with listening port 8080 is as follows:

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

Install Manually​

Install Node.js​

Ignore this step if you have installed 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

Download super-peer.zip​

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

Start Super Peer​

The script to start super peer with listening port 8080 is as follows:

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

pm2 is a Node.js application process manager that is used for keeping super peer alive forever.

npm i -g pm2
sudo ln -s /usr/local/nodejs/bin/pm2 /usr/local/bin
pm2 start index.js -n super-peer

Register Super Peer in Dashboard​

Log in dashboard, click on "P2P Setting" -> "Server as Peer" -> "+Super Peer", input the server URL(http://ip:port) and bandwidth, then click "Confirm". If the server status shows "Stopped", it means that the server cannot be connected. Please ensure that the firewall configuration is correct.

note

For live streaming, super peer can only serve clients within a straight distance of 7000 kilometers. Please choose a server that is as close to the user as possible to deploy.

Signal Configuration​

If your application has configured signal address on the console, you need to configure the same signal address for the super peer domain.

Seeding Strategy​

By default, the tracker server will automatically seed based on the current hot channel rankings. You can turn off automatic seeding and do it manually.

Monitor​

Click on the monitor button of the corresponding server on the page to view information such as the number of current connected peers, uploaded traffic in KB, and system resource usage for each worker process. You can also restart or kill a specific worker process.

Access Token (Optional)​

You can set an access token before starting the program:

echo 'accessToken=ACCESS_TOKEN' >> .env

ACCESS_TOKEN is the self-defined string, which should be same as the one registered in dashboard.

Signaling Address (Optional)​

In addition to configuring the signaling address on the console, it can also be configured through the .env file to use different signaling addresses in different regions:

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

signal1 is the primary signaling address, and signal2 is the backup signaling address.

Auto Startup (Optional)​

Start the program then run:

pm2 save && pm2 startup

Update Super Peer (Optional)​

Replace the file with new version, then restart the process:

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

or simply run:

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

Restful API​

HTTP Header​

NameTypeDescriptionRequired
X-ACCESS-TOKENstring访问token, 需要与超级节点启动时设置的一致否

Ping​

Check connectivity while setting bandwidth or worker count

POST /ping

POST Body​

NameTypeDescriptionRequired
bandwidthintbandwidth in MbpsNo
workersintForce the number of worker processesNo

Response​

NameTypeDescription
workersintCurrent number of workers processes

Seed​

Send seeding request

POST /seed

POST Body​

NameTypeDescriptionRequired
listarrayThe list of seeding informationYes

Body Example:​

{
"list": [
{
"token": user token
"channel": channel ID(Base64 encoded)
"trackerZone": cn, hk, us
"live": live streaming or vod
"signal1": primary signal address
"signal2": backup signal address
"priority": priority of seeding
"keepAlive": always alive
"noUseDiskCache": does not use disk cache for vod
"maxConnections": maximum p2p connections, default is 80
"label": customized super peer label
}
]

}

Response​

Status: 200

Stats​

Request all real-time statistics​

GET /stats

Request statistics for one worker​

GET /stats/:pid

Where pid is the process id of the worker

Request statistics for one channelId​

GET /stats/:channelId

Where channelId is the base64 encoded channel id

Stop all workers​

POST /stop_all

Stop one worker​

POST /stop/:pid

Restart all workers​

POST /restart_all

Restart one worker​

POST /restart/:pid