Как работает печатание в реальном времени в Google Wave? - PullRequest
34 голосов
/ 31 мая 2009

Я уверен, что Wave не опрашивает сервер каждую миллисекунду, чтобы узнать, набрал ли другой пользователь что-то ... так как я могу видеть, что другой человек печатает, когда они печатают? И без ограничения пропускной способности.

Ответы [ 9 ]

38 голосов
/ 31 мая 2009

Постоянный HTTP, Комета

Поддерживайте соединение HTTP и отправляйте символы по мере их ввода

* Редактирование в 2014 году: также взгляните на WebSocket и HTTP / 1.1 Upgrade header . Браузеры начали реализовывать это примерно в 2010 году, поэтому я добавляю это к первоначальному ответу.

6 голосов
/ 03 июня 2009

Они, вероятно, используют веб-сокеты, или отправленные сервером события: http://www.w3.org/TR/websockets Базовый протокол можно найти (как черновик) в IETF .

Обновление: кажется, что WebSockets еще не имеет никакой реализации; и видео из Google I / O (перейти к 11:00) рассказывает о долгоживущем HTTP-запросе GET.

4 голосов
/ 18 августа 2009

Сервер Push in GWT

Сервер push - это парадигма ожидания, ответа, закрытия, повторного открытия:

  • Ожидание: когда код GWT звонит на ваш сервер для некоторых данных, которые вы еще не заморозить (подождите)

  • Ответ: После того, как запрошенные данные
    доступно, ответьте

  • Закрыть: затем закрыть соединение.

  • Повторное открытие: как только ваш код GWT получит ответ, немедленно откройте новое соединение, чтобы запросить следующее событие.

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

См. Видео Google Wave: Powered by GWT около 55 минут (ближе к концу)

Q: Как вы реализуете постоянные соединения, долгоживущие http-соединения

A: План на будущее: веб-сокеты HTML5. Длительный срок. Это то, что мы используем в данный момент.

В: Есть ли платформа или библиотека, с которой мы можем скачать и поиграть?

A: Не уверен. Не думаю, что

П.С .: Вот что он сказал. Для меня это не имело особого смысла («планы на будущее» против «использования на данный момент»). Любой носитель английского языка может захотеть проверить, правильно ли я расшифровал его?

1 голос
/ 23 ноября 2009

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

WebSocket и Comet отличаются.

Гранвиль

1 голос
/ 05 июня 2009

Чистое предположение, но может ли это быть использование Server DOM событий из спецификации HTML 5?

0 голосов
/ 24 мая 2010

Я потратил некоторое время на реинжиниринг клиентского кода Google Wave (бесстыдный плагин для http://antimatter15.com/misc/read/, который является общедоступным клиентом только для чтения для волны Google для всех публичных волн без необходимости в роботах или гаджетах, что было много более полезно месяц назад, когда Google не запускал обновления).

В любом случае, Google использует каркас GWT с некоторыми аспектами библиотеки Google Closure (которая на самом деле является открытым исходным кодом и задокументирована), и они используют библиотеку goog.net.BrowserChannel, которая из комментариев также используется для функциональности чата в gmail. .

http://closure -library.googlecode.com / SVN / Docs / closure_goog_net_browserchannel.js.html

0 голосов
/ 22 ноября 2009

Я бы предположил, что они используют запросы ajax. Выполните запрос XMLHttpRequest, который является асинхронным, и когда на сервере есть, что отправить вашему браузеру, зарегистрированный обратный вызов javascript получает данные и делает с ними что угодно. Таким образом, в основном браузер запрашивает следующее событие, обрабатывает его, повторяет бесконечно.

0 голосов
/ 15 августа 2009

Вероятно, комета на данный момент websocket в будущем. Поскольку он работает в Firefox 3.5, и из того, что я читал, веб-сокет доступен только в ночных сборках FF ... Я могу ошибаться ... хотя, похоже, он вообще не работает в IE.

...