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

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

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

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


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

4 ответа

Решение

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

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

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

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

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

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

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

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

Другие вопросы по тегам