Как Gmail делает комету в Opera? - PullRequest
10 голосов
/ 17 апреля 2010

Я хотел бы знать, как Gmail (или кто-либо еще) делает комету в Opera.

Вот что я знаю из своих экспериментов.

  1. Он не использует тег источника событий , который не работает в Opera 10.51.
  2. Он не использует iframe, который отображает вращающийся пульсатор и занятый курсор мыши.
  3. Он не использует responseText в xmlhttprequest, когда readyState = 3, о котором известно, что он не работает в Opera.

Я попытался увидеть, как это делается в Mibbit и Etherpad, и обнаружил, что они оба используют длинный опрос.

Bounty

Награда достается тому, кто скажет мне метод, который лучше, чем «источник событий», для потоковой передачи кометы Opera или как gmail выполняет потоковую передачу (или длительный опрос, если он это делает).

Ответы [ 4 ]

9 голосов
/ 19 апреля 2010

GMail использует BrowserChannel ( Документы | Источник ), который включен в Google Closure Library .

  • @ fileoverview Определение класса BrowserChannel. BrowserChannel
  • имитирует двунаправленный сокет по HTTP. Это основа
  • Gmail Chat IM соединения с сервером.
0 голосов
/ 27 января 2012

Я являюсь автором встроенного в C ++ HTTP-сервера, совместимого с goog.netBrowserChannel. Вы можете найти документы, которые я написал во время изучения протокола, здесь:

http://code.google.com/p/libevent-browserchannel-server/wiki/BrowserChannelProtocol

Короче говоря, BrowserChannel использует фреймы навсегда в IE и потоковую передачу XHR во всех других браузерах. Протокол разделен на несколько этапов, первым из которых является тестирование сети:

1) протестировать сеть, чтобы убедиться в том, что поддерживается потоковая передача ответа (другими словами, не существует буферизующего прокси) 2) проверить доступ к различным сетевым префиксам (чтобы убедиться, что администратор сети не заблокировал доступ к чату)

Тогда может начаться фактическая передача данных. Данные делятся на два канала (прямой и обратный). Обратный канал представляет собой серию долгоживущих (около 4 минут каждый) запросов, используемых сервером для «потоковой передачи» контента клиенту. Для этого используется HTTP-кодирование. Клиент делает все возможное, чтобы один обратный канал всегда был открыт. Сервер будет закрывать его примерно каждые 4 минуты, после чего клиент откроет новый обратный канал. Прямой канал используется для отправки данных с клиента на сервер. Это подталкивание данных выполняется по мере необходимости.

0 голосов
/ 25 апреля 2010

Я думаю, что кросс-браузерный (включая Opera) подход может заключаться в потоковой передаче данных через приложение Adobe Flash. Хотя это может привести к зависимости от плагина Flash и не очень популярно из-за этого.

0 голосов
/ 18 апреля 2010

Я действительно понятия не имею, каков ответ. Но я знаю, что Opera поддерживает серверные события: http://my.opera.com/WebApplications/blog/show.dml/438711. Может быть, это шаг навстречу? Я тоже не совсем уверен, но я думаю, что они используют его в Opera Unite.

...