Здравствуйте.
В Web SDK отсутствует возможность указать желаемый таймаут подключения WebSocket к серверу Flashphoner. Экспериментально установлено, что по-умолчанию, он равен 60 секундам. Отсутствие возможности им управлять чревато плохим UX: в случае, если с сервером какие-либо проблемы, пользователь будет ждать те самые 60 секунд прежде чем работа кода завершится с ошибкой подключения.
Конечно, можно попробовать реализовать такой таймаут в userland-коде, а не Web SDK, используя какой-нибудь "setTimeout()", но это видится несколько костыльным решением в контексте использования целого SDK, который как раз должен такие вещи инкапсулировать.
Да и сама ошибка подключения, кстати, не перехватывается SDK (генерируется событие FAILED, но ошибка подключения - вне его), а пишется сразу в консоль браузера, что тоже не есть хорошо.
Собственно, это скорее feature request: добавить возможность управлять таймаутом подключения WebSocket для методов "createSession()" и "createStream()", это позволит снять много головной боли с тех, кто работает с SDK, и не изобретать велосипед с "setTimeout()" каждый раз. Возможно, добавить так же ещё и для SIP-методов, где это актуально.
Пример кода для STR:
Текущий результат:
В 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