Ответ 1
Существует ли название для решения Google для обновлений в режиме реального времени на диске (например, "длинный опрос" или "сокеты")?
У него не было названия до сих пор. Я назову это "не опросить", чтобы сравнить с опросом и длинным опросом.
При опросе клиент периодически отправляет запросы на новые данные.
При длительном опросе клиент запрашивает данные, а сервер обрабатывает запрос, заканчивая ответ обновлениями при наличии обновлений.
В режиме без опроса (что делает Google Диск) используется то, как браузер может считывать данные из тела запроса до его завершения. Поэтому, когда соавторы выполняют больше операций ввода и редактирования, сервер добавляет больше данных к текущему запросу. Если соблюдены определенные ограничения (длина содержимого или длительность запроса), запрос завершается, и клиент инициирует новый запрос с сервера.
Как я могу попробовать реализовать это?
Чтобы клиент отправлял обновления на сервер: это можно сделать с помощью обычных процедур POST.
Чтобы клиент подписался на обновления с сервера:
-
Клиент отправляет GET для потока обновлений, а затем начинает читать тело ответа до его завершения.
Объекты XHR могут отправлять события
progress
до завершения запроса. (Частичный) ответ доступен с помощьюxhr.responseText
. ~~ Там нет простого способа следить за прогресс сfetch
еще (май 2016 г.). ~~ При использованииfetch
можно наблюдать за прогресс по потребляя res.body ReadableStream. -
Клиент должен инициировать новый запрос, когда текущий запрос заканчивается.
Сервер должен:
- Отслеживайте, какие клиенты подписаны на какие потоки обновлений.
- Когда поступает запрос для определенного потока обновлений, запишите данные в ответ, но не завершайте ответ, пока объем данных не станет большим или не истечет время ожидания.
По моему мнению, отсутствие опроса кажется более продолжительным, чем длительный, хотя я не слишком много с ним играл. Длинный опрос вызывает компромисс между задержкой и размером сообщения (учитывая постоянную частоту обновлений), компромиссный опрос не требуется. Другим недостатком длинного опроса является то, что он может привести к множеству HTTP-запросов, каждый раз оплачивая HTTP-издержки.
Без опроса большое преимущество по сравнению с WebSockets состоит в том, что опросы не поддерживаются каждым браузером, хотя поддержка WebSocket довольно хорошая - IE10+.