Как gmail проверяет статусы gtalk в режиме реального времени? - PullRequest
1 голос
/ 25 ноября 2010

Как получается, что если у меня есть тысячи контактов (предположим) по всему миру, и один из них меняет свой статус на отсутствующий или становится кумиром, это немедленно изменится в моем браузере?

Ответы [ 3 ]

3 голосов
/ 25 ноября 2010

Это не мгновенный на самом деле, есть небольшая задержка, в основном, когда вы загружаете страницу gmail в браузере, вы также скачиваете файл javascript, который обновляет содержимое динамически через ajax.Точно так же, если ваш собеседник меняет статус gtalk и вы используете gtalk-клиент в gmail, это изменение будет отражено после того, как просматриваемая страница в следующий раз запросит у сервера обновления.Он просто постоянно проверяет изменения на сервере (событийно-ориентированная парадигма не очень распространена в сети).

2 голосов
/ 27 ноября 2010

Система чата Google основана на протоколе XMPP , а блок чата Gmail аналогичен другому клиенту XMPP (аналогично gtalk, pidgin, psi для настольных компьютеров).XMPP работает через браузер с расширением Bosh .Хотя я уверен, что Google, должно быть, взломал, чтобы заставить его работать по-своему, но основная идея все та же.

Короче говоря, когда один из ваших контактов обновляет свой статус, он подталкивается кСерверы Google Chat xmpp, которые, в свою очередь, отправляют эту информацию в ваш клиент чата gmail.

2 голосов
/ 25 ноября 2010

Я не уверен в точном механизме, который использует gmail, но довольно глупым способом было бы опрос страниц (через XMLHTTPRequest, также называемый вызовом AJAX) серверов каждые X секунд для изменения состояния контактов, начиная с N секунд назад.... затем примените эти изменения.

...