Как сделать живое обновление, подобное Google Docs? - PullRequest
23 голосов
/ 10 сентября 2010

Я хочу сделать что-то очень похожее на живое обновление Документа Google - где все пользователи могут «немедленно» увидеть действия других пользователей в документе.

Чтобы достичь этого, мои идеи пока:

  • Непрерывные запросы AJAX, выполняемые в фоновом режиме (это может показаться повышенным по производительности)?
  • Неужели у сервера нет способа отправить уведомления всем своим клиентам и соответствующим образом обновить их?
  • AJAX запрашивает каждые X секунд с буфером / промежутком времени действий, которые должны быть выполнены за эти X секунд (имитирующих эффект в реальном времени)?

Я хотел бы знатьдругие испытывают попытки достичь этого эффекта.Каков наилучший способ сделать это?

Вся помощь приветствуется.

ПРИМЕЧАНИЕ: Я специально не ищу решение для редактирования документов в реальном времени.Я ищу решение той же концепции, что Google делает со своими документами.Я на самом деле буду использовать это решение немного по-другому.

Ответы [ 11 ]

12 голосов
/ 13 сентября 2010

Я голосую за стратегию Long-poll: каждый клиент открывает запрос к серверу, но сервер никогда не разрывает соединения и время от времени просто отправляет кусочки java-скрипта.

Постоянные запросы AJAXубил бы ваш сервер.

8 голосов
/ 15 сентября 2010

Оформить google mobwrite . Это встроенная библиотека, которая позволяет совместно редактировать HTML-формы с помощью операционного преобразования .

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

3 голосов
/ 16 сентября 2010

Если ваши пользователи используют только современные браузеры, я бы попробовал стандарт веб-сокетов с HTML 5. Все больше и больше браузеров будут поддерживать его в будущем, и над этим работают такие компании, как Google и Apple.Вот учебник по началу работы: http://net.tutsplus.com/tutorials/javascript-ajax/start-using-html5-websockets-today/

3 голосов
/ 15 сентября 2010

Другой альтернативой является Орбитальный :

Орбитальный обеспечивает чистый JavaScript / HTML-сокет в браузере. Это веб-маршрутизатор и брандмауэр, которые позволяет интегрировать веб приложения с произвольным фоном системы. Вы можете реализовать любую сеть протокол в браузере - без прибегая к плагинам.

Orbited - это демон HTTP, который оптимизирован для длительной кометы соединения. Он предназначен для легко интегрируется с новыми и существующие приложения. Орбитальный позволяет вам писать в режиме реального времени веб приложения, такие как чат или клиент обмена мгновенными сообщениями, без используя любые внешние плагины, такие как Flash или Java.

3 голосов
/ 13 сентября 2010

Ajax-подход - это один из способов. Вы можете реализовать это как приложения для чата. Фактический способ будет зависеть от просматриваемых данных. Короче

  1. Создать сеанс. Здесь могут разместиться пользователи, разделяющие документ (например, файл Excel)
  2. Когда пользователь A вносит изменения (например, обновляет ячейку A5), используйте Ajax для отправки изменений на сервер. Изменение может быть сохранено с датой прибытия или некоторым значением индекса.
  3. Время от времени на странице запускается фоновый Ajax-вызов. В рамках запроса также передается последняя дата доступа.
  4. Получив запрос, вы просто обслуживаете все изменения, сделанные в последний раз или в индексе. Вы можете включить новую дату или значение индекса как часть ответа, чтобы его можно было использовать для следующего запроса.
  5. Если вы уверены, что к верхним элементам X не будет доступа, вы можете удалить их

Будет ли это повышать производительность или нет, во многом будет зависеть от того, как все структурировать.

Другой вариант - веб-сокеты. Лично он не использовался, но если у вас есть контроль над тем, какой браузер будут использовать ваши пользователи, вы можете попробовать. Это позволяет серверу передавать данные в браузер. Некоторые ссылки: веб-сокеты JS и Веб-сокеты в Firefox

2 голосов
/ 16 сентября 2010

EtherPad был с открытым исходным кодом, если вы ищете совместный текстовый редактор в реальном времени.

2 голосов
/ 13 сентября 2010

Если вы не хотите использовать веб-сокеты, потому что они не поддерживаются широко, вам нужно поискать Comet. Вот как Google Docs, вероятно, делает это.

1 голос
/ 19 сентября 2010

Также взгляните на pubsubhubbub - http://code.google.com/p/pubsubhubbub/ Посмотрите видео для краткого вступления.

1 голос
/ 18 сентября 2010

Я рекомендую использовать каркас Comet, такой как Атмосфера .Он автоматически выберет транспортный механизм для ваших сообщений, который может быть веб-сокетом, если вам повезет (но, поскольку это абстрагировано, вам не о чем беспокоиться).В любом случае, это большая ценность, если вам не приходится иметь дело с отдельными запросами / ответами и всеми источниками ошибок и ошибками браузера, с которыми вы столкнетесь.Я был там.Там будут драконы.: -)

1 голос
/ 13 сентября 2010

Один из способов ограничить количество ajax-запросов - это уметь разбираться с ними.Вам не нужно делать запрос каждую секунду.Когда вы получите ответ с действием, то выполните еще один запрос в течение 1 секунды.Если нет активности, то 2 секунды, затем 4 и т. Д., Максимум между 30 запросами.Когда обновления произойдут, сбросьте таймер.По сути, разумно распределите ваши запросы, чтобы графический интерфейс пользователя выглядел максимально отзывчивым.

...