Как работает уведомление о входящей почте в Gmail?

Мне интересно, как это реализовано в Gmail, что каждый раз, когда вы получаете электронную почту, список писем автоматически обновляется. Похоже, сервер отправляет какое-то событие в браузер, но как это возможно? Или, может быть, его simle: браузер запрашивает у сервера новые сообщения, каждый раз скажет 2 секунды? Но это, вероятно, убьет производительность...

У кого-нибудь есть идеи?

EDIT: ОК, поэтому, если это простой ответ, как они справляются с производительностью? Когда я отправляю электронное письмо из другой учетной записи в учетную запись gmail, представление "обновляется" почти мгновенно. Вы говорили о простой функции, которая возвращает true/false, но она должна иметь некоторую логику (соединение db или чтение некоторых файлов). Как им это удается?


См. также: Как GMail Chat может выполнять запросы AJAX без взаимодействия с клиентом?

Ответ 1

Не знаю точно, какую технологию использует Gmail, но концепция заключается в том, чтобы открыть канал - используя обратные методы AJAX, кометы или звездочки.

Подумайте об этом как о клиенте, запрашивающем сервер для данных, но сервер не возвращается в течение одной минуты, если у него нет новой почты. Используя этот метод, клиент может практически показать результаты в режиме реального времени, и он не должен опросить каждые 2 секунды. Имеет смысл?

Ответ 2

gmail фактически проверяет сервер на наличие обновлений. Не так часто, как каждые две секунды. Это было бы безумием. Немного тестирования с Tamper Data делает его похожим, может быть, каждые 20 секунд, хотя, похоже, происходит несколько событий, которые немного путают его.

Что касается вашего редактирования, я полагаю, у них может быть временная метка последнего действия для отслеживания учетной записи в их базе данных, при этом запрос на опрос клиентов будет получен через Ajax и сравнивается с последней синхронизацией, чтобы определить, нужно ли ему выполнять полное обновление.

Ответ 3

У вас есть право с простым ответом. Google Mail проверяет новые сообщения на сервере через AJAX.

Ответ 4

Это должен быть какой-то прослушиватель ajax, который получает информацию каждые X секунд.

Я уже установил что-то подобное для одного из моих проектов. То, что я делал, вызывает функцию, возвращающую true или false. Истинно, если страница нуждается в обновлении, в противном случае - false. Затем, если у вас есть обновление, вы делаете еще один звонок, чтобы получить фактическое обновление. Таким образом, вам не нужно обновлять все каждый раз... но он все еще интенсивный на сервере, если у вас много пользователей.

Другими словами, как и хаос, он опросил сервер.