Подтвердить что ты не робот

Как сделать живое обновление, подобное Google Docs?

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

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

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

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

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

Ответ 3

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

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

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

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

Ответ 4

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

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

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

Ответ 5

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

Ответ 6

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

Ответ 7

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

Ответ 8

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

Ответ 9

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

Ответ 11

Вы также можете взглянуть на ShareJS оперативную трансформационную библиотеку и Derby, который является структурой, основанной на sharejs. Они оба имеют node.js backends - sharejs был написан инженером Google Wave.