Как работает автосохранение документов Google?

#ajax #google-docs

#ajax #google-docs

Вопрос:

Хорошо, я знаю, это звучит обобщенно. Но я имею в виду на уровне AJAX. Я пытался использовать Firebug для отслеживания сетевых подключений и сообщений, но это загадка. Кто-нибудь знает, как они постоянно выполняют мгновенное автосохранение, не РАЗРУШАЯ сеть / браузер?

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

1. window.setInterval с помощью AJAX и некоторых условий?

2. Не уверен, что это правильно — если вы посмотрите на консоль, кажется, что она не так уж много делает

Ответ №1:

Я предполагаю (и это только предположение), что Google использует PUSH-сервис. Это кажется наиболее приемлемым вариантом, учитывая, что их чат-клиент (который также интегрирован в window) также использует это для доставки сообщений «в реальном времени» с минимальной задержкой.

Держу пари, у них есть целая настройка, которая управляет всем, что связано с подключением, и отправляет флаги для запуска определенных элементов. Вы не увидите триггеры подключения, потому что при первом посещении страницы соединение устанавливается, а затем просто зависает на все время, пока страница открыта. например

  1. Вы посещаете страницу
    • Браузер установил соединение с [примером]api.docs.google.com [/ пример] и остается открытым
  2. Затем клиентский код отправляет различные команды и получает множество ответов.
  3. Эти команды отправляются туда и обратно, пока вы либо:
    • Потеря соединения (тайм-аут и т.д.), В этом случае оно восстанавливается
    • Окно браузера закрыто

Пример, как я вижу, типичного общения:

 SERVER:                              CLIENT:
-------                              -------
                                     DOC_FETCH mydocument.doc
DOC_CONTENT mydocument.doc 15616 ...      
                                     DOC_AUTOSAVE mydocument.doc 24335 ...
                                     IM collaboratorName Hi Joe!
IM_OK collaboratorName OK
AUTOSAVE_OK mydocument.doc OK
  

Где DOC_FETCH команда говорит, что мне нужны данные. Сервер отвечает соответствующим DOC_CONTENT <docname> <length> <contents> . Затем запускается клиент DOC_AUTOSAVE <docname> <length> <content> . Учитывая количество потенциальных одновременных запросов, я бы поспорил, что они сохраняют «контекст» в запросах / ответах, поэтому после отправки чего-либо его можно сопоставить. В этом примере он знает, что IM_OK соответствует второму запросу ( IM ), а AUTOSAVE_OK соответствует первому запросу ( AUTOSAVE ) — что-то вроде того, как работает протокол обмена мгновенными сообщениями AOL.

Опять же, это всего лишь предположение.

Чтобы доказать это, используйте что-то вроде ethereal и посмотрите, можете ли вы видеть передачу информации в фоновом режиме.

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

1. Спасибо @Brad-Christie за его ответ, однако мне не ясно, как этого добиться.