В сборке 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 }, ... }