Задержка WebRTC на iceConnectionState — «отключено»

Подключены два пира - хост и клиент

Клиент отключается, а iceConnectionState - «отключено» на хосте срабатывает примерно через 3-7 секунд.

Почему есть задержка? и как убрать эту задержку?

Я просто хотел получить онлайн-статус пользователя в режиме реального времени.

Руководство для начинающих по веб-разработке на React.js
Руководство для начинающих по веб-разработке на React.js
Веб-разработка - это захватывающая и постоянно меняющаяся область, которая постоянно развивается благодаря новым технологиям и тенденциям. Одним из...
Калькулятор CGPA 12 для семестра
Калькулятор CGPA 12 для семестра
Чтобы запустить этот код и рассчитать CGPA, необходимо сохранить код как HTML-файл, а затем открыть его в веб-браузере. Для этого выполните следующие...
Как собрать/развернуть часть вашего приложения Angular
Как собрать/развернуть часть вашего приложения Angular
Вам когда-нибудь требовалось собрать/развернуть только часть вашего приложения Angular или, возможно, скрыть некоторые маршруты в определенных средах?
Оптимизация React Context шаг за шагом в 4 примерах
Оптимизация React Context шаг за шагом в 4 примерах
При использовании компонентов React в сочетании с Context вы можете оптимизировать рендеринг, обернув ваш компонент React в React.memo сразу после...
Интервьюер: Почему '[] instanceof Object' возвращает "true"?
Интервьюер: Почему '[] instanceof Object' возвращает "true"?
Все мы знаем, что [] instanceof Array возвращает true, но почему [] instanceof Object тоже возвращает true?
Абстрактное синтаксическое дерево (AST) и как оно работает с ReactJS
Абстрактное синтаксическое дерево (AST) и как оно работает с ReactJS
Абстрактное синтаксическое дерево (AST) - это древовидная структура данных, которая представляет структуру и иерархию исходного кода на языке...
0
0
57
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Одноранговое соединение закрывается, когда данные не поступают в течение нескольких секунд, отсюда и задержка. Нет веб-API для настройки этого времени ожидания.

Я вижу три способа уменьшить задержку:

  1. Отправлять сообщения поддержки активности между узлами через канал данных. Если не было поддержки активности в течение n миллисекунд, клиент считается отключенным; соединение может быть закрыто (или может отображаться «ожидающий» статус пользователя). Некоторый тайм-аут по-прежнему необходим, но он может быть короче, чем по умолчанию.

  2. Если клиент всегда отправляет видео, вы можете использовать getStats() для определения отсутствия новых пакетов => клиент отключен. Это то же самое, что и 1, но с использованием видеопакетов вместо сообщений поддержки активности. Смотрите этот ответ.

  3. Отправьте сообщение на сервер, когда клиент собирается отключиться, чтобы сервер знал, что соединение больше не требуется, и закройте его. Например, вы можете отправить сообщение «до свидания» на канал данных WebRTC в обратном вызове window.onbeforeunload. Недостатком является то, что если клиент выходит из сети, не закрывая страницу, вам все равно придется ждать n секунд, независимо от того, что установлено по умолчанию в вашем браузере.

Другие вопросы по теме