Как работает уведомление о входящей почте в Gmail?
Мне интересно, как это реализовано в Gmail, что каждый раз, когда вы получаете электронную почту, список писем автоматически обновляется. Похоже, сервер отправляет какое-то событие в браузер, но как это возможно? Или, может быть, его simle: браузер запрашивает у сервера новые сообщения, каждый раз скажет 2 секунды? Но это, вероятно, убьет производительность...
У кого-нибудь есть идеи?
EDIT: ОК, поэтому, если это простой ответ, как они справляются с производительностью? Когда я отправляю электронное письмо из другой учетной записи в учетную запись gmail, представление "обновляется" почти мгновенно. Вы говорили о простой функции, которая возвращает true/false, но она должна иметь некоторую логику (соединение db или чтение некоторых файлов). Как им это удается?
Ответы
Ответ 1
Не знаю точно, какую технологию использует Gmail, но концепция заключается в том, чтобы открыть канал - используя обратные методы AJAX, кометы или звездочки.
Подумайте об этом как о клиенте, запрашивающем сервер для данных, но сервер не возвращается в течение одной минуты, если у него нет новой почты. Используя этот метод, клиент может практически показать результаты в режиме реального времени, и он не должен опросить каждые 2 секунды. Имеет смысл?
Ответ 2
gmail фактически проверяет сервер на наличие обновлений. Не так часто, как каждые две секунды. Это было бы безумием. Немного тестирования с Tamper Data делает его похожим, может быть, каждые 20 секунд, хотя, похоже, происходит несколько событий, которые немного путают его.
Что касается вашего редактирования, я полагаю, у них может быть временная метка последнего действия для отслеживания учетной записи в их базе данных, при этом запрос на опрос клиентов будет получен через Ajax и сравнивается с последней синхронизацией, чтобы определить, нужно ли ему выполнять полное обновление.
Ответ 3
У вас есть право с простым ответом. Google Mail проверяет новые сообщения на сервере через AJAX.
Ответ 4
Это должен быть какой-то прослушиватель ajax, который получает информацию каждые X секунд.
Я уже установил что-то подобное для одного из моих проектов. То, что я делал, вызывает функцию, возвращающую true или false. Истинно, если страница нуждается в обновлении, в противном случае - false. Затем, если у вас есть обновление, вы делаете еще один звонок, чтобы получить фактическое обновление. Таким образом, вам не нужно обновлять все каждый раз... но он все еще интенсивный на сервере, если у вас много пользователей.
Другими словами, как и хаос, он опросил сервер.