Skip to end of metadata
Go to start of metadata

В сборке 2.0.194 добавлена возможность контролировать целостность websocket соединения с сервером. WCS сервер периодически (по умолчанию каждые 5 секунд) присылает ping пакеты. На стороне SFU SDK эти пакеты принимаются и подсчитываются. Если больше заданного количества пакетов подряд было пропущено, предполагается, что соединение с сервером потеряно, и клиенту возвращается событие SfuEvent.CONNECTION_FAILED.

Настройка параметров контроля в конфигурационном файле config.json 

Если пример поддерживает загрузку параметров из конфигурационного файла config.json , максимальное количество пропущенных ping пакетов и интервал проверки могут быть настроены в файле:

code

{
  "room": {
    ...,
    "failedProbesThreshold": 5,
    "pingInterval": 5000
  },
  ...
}

Здесь:

  • failedProbesThreshold - максимальное число пропущенных подряд ping пакетов от сервера
  • pingInterval - интервал проверки числа пропущенных ping пакетов в мс

Настройка параметров контроля на уровне исходного кода

1. Формирование объекта roomConfig 

code

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. Установка соединения и создание комнаты

code

const session = await sfu.createRoom(roomConfig);

3. Обработка события SfuEvent.CONNECTION_FAILED 

code

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
  },
  ...
}
  • No labels