В сборке 2.0.194 добавлена возможность контролировать целостность websocket соединения с сервером. WCS сервер периодически (по умолчанию каждые 5 секунд) присылает ping пакеты. На стороне SFU SDK эти пакеты принимаются и подсчитываются. Если больше заданного количества пакетов подряд было пропущено, предполагается, что соединение с сервером потеряно, и клиенту возвращается событие SfuEvent.CONNECTION_FAILED.
Настройка параметров контроля в конфигурационном файле config.json
Если пример поддерживает загрузку параметров из конфигурационного файла config.json , максимальное количество пропущенных ping пакетов и интервал проверки могут быть настроены в файле:
{
"room": {
...,
"failedProbesThreshold": 5,
"pingInterval": 5000
},
...
}
Здесь:
failedProbesThreshold- максимальное число пропущенных подряд ping пакетов от сервераpingInterval- интервал проверки числа пропущенных ping пакетов в мс
Настройка параметров контроля на уровне исходного кода
1. Формирование объекта roomConfig
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. Установка соединения и создание комнаты
const session = await sfu.createRoom(roomConfig);
3. Обработка события SfuEvent.CONNECTION_FAILED
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");
}
});
Отключение контроля на стороне клиента
В некоторых случаях отправка ping пакетов может быть отключена на стороне сервера
keep_alive.algorithm=NONE
На стороне клиента при этом проверка также должна быть отключена
{
"room": {
...,
"failedProbesThreshold": 0,
"pingInterval": 0
},
...
}