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

Discussion in 'Web Call Server 5' started by Axel, Oct 31, 2019.

  1. Axel

    Axel New 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
    
  2. Max

    Max Administrator Staff Member

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

Share This Page