Since SFU SDK build 2.0.194 it is possible to check a websocket server connection consistency. WCS server sends a special ping packets periodically (every 5 seconds by default). The ping packets are received and counted by SFU SDK. If more than a certain number of consequent packets are missed, the websocket connection is supposed to be lost, and the client receives SfuEvent.CONNECTION_FAILED
event.
Connection control parameters setup in config.json
file
If the example reads the connection parameters from config.json
file, the maximum number of pings missing and pings checking interval may be set in the file:
{ "room": { ..., "failedProbesThreshold": 5, "pingInterval": 5000 }, ... }
Where:
failedProbesThreshold
- the maximum number of pings missingpingInterval
- pings checking interval in ms
Connection control parameters setup in a source code
1. roomConfig
object creation
let roomConfig = { url: config.room.url || "ws://127.0.0.1:8080", roomName: config.room.name || "ROOM1", pin: config.room.pin || "1234", nickname: config.room.nickName || "User1" }; if (config.room.failedProbesThreshold !== undefined) { roomConfig.failedProbesThreshold = config.room.failedProbesThreshold; } if (config.room.pingInterval !== undefined) { roomConfig.pingInterval = config.room.pingInterval; }
2. Connection establishing and the room creation
const session = await sfu.createRoom(roomConfig);
3. SfuEvent.CONNECTION_FAILED
event handling
session.on(constants.SFU_EVENT.DISCONNECTED, function() { ... }).on(constants.SFU_EVENT.FAILED, function(e) { ... setStatus(state.statusId(), "FAILED", "red"); if (e.status && e.statusText) { ... } else if (e.type && e.info) { setStatus(state.errInfoId(), e.type + ": " + e.info, "red"); } });
Disabling connection control at client side
Sometimes pings sending may be disabled at server side
keep_alive.algorithm=NONE
In this case, pings checking at client side should also be disabled
{ "room": { ..., "failedProbesThreshold": 0, "pingInterval": 0 }, ... }