Подключены два пира - хост и клиент
Клиент отключается, а iceConnectionState - «отключено» на хосте срабатывает примерно через 3-7 секунд.
Почему есть задержка? и как убрать эту задержку?
Я просто хотел получить онлайн-статус пользователя в режиме реального времени.
Одноранговое соединение закрывается, когда данные не поступают в течение нескольких секунд, отсюда и задержка. Нет веб-API для настройки этого времени ожидания.
Я вижу три способа уменьшить задержку:
Отправлять сообщения поддержки активности между узлами через канал данных. Если не было поддержки активности в течение n миллисекунд, клиент считается отключенным; соединение может быть закрыто (или может отображаться «ожидающий» статус пользователя). Некоторый тайм-аут по-прежнему необходим, но он может быть короче, чем по умолчанию.
Если клиент всегда отправляет видео, вы можете использовать getStats() для определения отсутствия новых пакетов => клиент отключен. Это то же самое, что и 1, но с использованием видеопакетов вместо сообщений поддержки активности. Смотрите этот ответ.
Отправьте сообщение на сервер, когда клиент собирается отключиться, чтобы сервер знал, что соединение больше не требуется, и закройте его. Например, вы можете отправить сообщение «до свидания» на канал данных WebRTC в обратном вызове window.onbeforeunload. Недостатком является то, что если клиент выходит из сети, не закрывая страницу, вам все равно придется ждать n секунд, независимо от того, что установлено по умолчанию в вашем браузере.