Зачем отправлять пустую строку с интервалом на сервер WebSocket

#javascript #websocket

#javascript #websocket

Вопрос:

Следующий фрагмент взят из файла js, который использует собственный API WebSocket для потоковой передачи изображений. Файл уменьшен и уродлив, у меня нет доступа к исходному коду.

 setInterval(function () { n amp;amp; n.send("")},
NETWORK.websocketSendMessage)
  

n — это объект, инициализированный для собственного объекта подключения WebSocket, который передает файлы JPEG в кодировке base64.
Время интервала является постоянным, равным 1000 мс.

Предположительно, это заставляет сервер отправлять набор кадров каждую секунду, что асинхронно запускает обработчик onmessage, установленный для объекта ws.

Я пытаюсь понять, почему этот интервал необходим — в моем понимании использование WebSocket должно предотвратить необходимость использования такого примитивного опроса в первую очередь (хотя я предполагаю, что это, очевидно, будет быстрее, чем фактический опрос с новым http-запросом каждую секунду).

Клиент не должен обновлять сервер, чтобы он хотел продолжить получение содержимого. Скорее, более логичным подходом, на мой взгляд, было бы объявить, когда содержимое должно прекратиться.

Может ли это быть методом управления оперативной памятью? Обработчик onmessage, похоже, отключает анализатор данных каждый раз, когда он запускается — может ли это, в свою очередь, освободить оперативную память, используемую потоковыми файлами в конечном итоге gc?

Имейте в виду, что это может быть древний устаревший код — так что, возможно, понимание особенностей браузера может быть полезным.

Комментарии:

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

Ответ №1:

Keepalive — это сообщение, отправляемое одним устройством другому для проверки того, что связь между ними работает, или для предотвращения разрыва связи. подробнее об этом можно прочитать здесьhttps://en.wikipedia.org/wiki/Keepalive