В Web SDK отсутствует возможность указать таймаут подключения WebSocket

Axel

Member
Здравствуйте.

В Web SDK отсутствует возможность указать желаемый таймаут подключения WebSocket к серверу Flashphoner. Экспериментально установлено, что по-умолчанию, он равен 60 секундам. Отсутствие возможности им управлять чревато плохим UX: в случае, если с сервером какие-либо проблемы, пользователь будет ждать те самые 60 секунд прежде чем работа кода завершится с ошибкой подключения.

Конечно, можно попробовать реализовать такой таймаут в userland-коде, а не Web SDK, используя какой-нибудь "setTimeout()", но это видится несколько костыльным решением в контексте использования целого SDK, который как раз должен такие вещи инкапсулировать.

Да и сама ошибка подключения, кстати, не перехватывается SDK (генерируется событие FAILED, но ошибка подключения - вне его), а пишется сразу в консоль браузера, что тоже не есть хорошо.

Собственно, это скорее feature request: добавить возможность управлять таймаутом подключения WebSocket для методов "createSession()" и "createStream()", это позволит снять много головной боли с тех, кто работает с SDK, и не изобретать велосипед с "setTimeout()" каждый раз. Возможно, добавить так же ещё и для SIP-методов, где это актуально.

Пример кода для STR:

Code:
Flashphoner.init();

const session = Flashphoner.createSession({
    urlServer: 'ws://192.168.104.1:8443'
});

session.on(Flashphoner.constants.SESSION_STATUS.APP_DATA, () => {
    console.log(`Session event fired: ${Flashphoner.constants.SESSION_STATUS.APP_DATA}`)
}).on(Flashphoner.constants.SESSION_STATUS.CONNECTED, () => {
    console.log(`Session event fired: ${Flashphoner.constants.SESSION_STATUS.CONNECTED}`)
}).on(Flashphoner.constants.SESSION_STATUS.DEBUG, () => {
    console.log(`Session event fired: ${Flashphoner.constants.SESSION_STATUS.DEBUG}`)
}).on(Flashphoner.constants.SESSION_STATUS.DISCONNECTED, () => {
    console.log(`Session event fired: ${Flashphoner.constants.SESSION_STATUS.DISCONNECTED}`)
}).on(Flashphoner.constants.SESSION_STATUS.ESTABLISHED, () => {
    console.log(`Session event fired: ${Flashphoner.constants.SESSION_STATUS.ESTABLISHED}`)
}).on(Flashphoner.constants.SESSION_STATUS.FAILED, () => {
    console.log(`Session event fired: ${Flashphoner.constants.SESSION_STATUS.FAILED}`)
}).on(Flashphoner.constants.SESSION_STATUS.SEND_DATA_STATUS, () => {
    console.log(`Session event fired: ${Flashphoner.constants.SESSION_STATUS.SEND_DATA_STATUS}`)
}).on(Flashphoner.constants.SESSION_STATUS.WARN, () => {
    console.log(`Session event fired: ${Flashphoner.constants.SESSION_STATUS.WARN}`)
});

/* // Пример реализации упомянутого таймаута
setTimeout(() => {
    console.log('Try to stop session by userland timeout');

    session.disconnect();
}, 2000);
*/

Текущий результат:

Code:
11:00:25 INFO webrtc -  Initialized
11:00:25 INFO websocket -  Initialized
11:00:25 INFO core -  Initialized

// спустя ~60 секунд

flashphoner.min.js:1 WebSocket connection to 'ws://192.168.104.1:8443/' failed: Error in connection establishment: net::ERR_CONNECTION_TIMED_OUT
Session event fired: FAILED
 

Max

Administrator
Staff member
Добрый день.
Спасибо за предложение. По вашему обращению создан внутренний тикет WCS-2342, мы дополнительно сообщим вам о результатах.
 

Max

Administrator
Staff member
Добрый день.
В новой версии WebSDK, которая доступна на странице Web SDK release notes, добавлена возможность указать таймаут установки WebSocket соединения при создании сессии. Для этого необходимо передать значение timeout (tm) в миллисекундах в функцию createSession. Если сервер не отвечает в течение указанного времени, клиент получает событие SESSION_STATUS.FAILED:
PHP:
var url = "wss://<your WCS domain name or IP-address>:8443";
var tm = 1000;
Flashphoner.createSession({urlServer: url, timeout: tm}).on(SESSION_STATUS.ESTABLISHED, function (session) {
    ...
});
 

Axel

Member
Отлично, спасибо! Как раз сегодня обновлял версию SDK и увидел эти обновки.

Тем не менее, в догонку хотелось бы добавить: в новом коде в случае срабатывания таймаута, в консоль пишется сообщение:

Code:
console.log("WS connection timeout");
Но ведь в кодовой базе есть логгер, почему бы не использовать его? Я недавно здесь тему создавал по поводу того, что бы как-то уменьшить "разговорчивость" WebSDK в консоли - и тут такая подстава :)
 
Last edited:

Max

Administrator
Staff member
Да, по вопросу логирования создан внутренний тикет WCS-2340. Когда будет информация по его статусу, мы вам обязательно сообщим.
 
Top