Как работает уведомление о входящей почте в Gmail? - PullRequest
13 голосов
/ 12 июня 2009

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

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

РЕДАКТИРОВАТЬ: ОК, так что, если это простой ответ, как они управляют производительностью? Когда я отправляю письмо из другой учетной записи на учетную запись gmail, представление «обновляется» почти мгновенно. Вы говорили о простой функции, которая возвращает истину / ложь, но она должна иметь некоторую логику (соединение с БД или чтение некоторых файлов). Как им это удается?


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

Ответы [ 4 ]

11 голосов
/ 12 июня 2009

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

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

3 голосов
/ 12 июня 2009

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

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

2 голосов
/ 12 июня 2009

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

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

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

2 голосов
/ 12 июня 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...