2013-02-10 1 views
1

Я ищу библиотеку, которая поможет мне синхронизировать состояние между моим сервером и моим графическим интерфейсом в режиме реального времени. У меня есть сортировка сообщений и промежуточное ПО (push-обновления и т. Д.), Но мне нужен протокол, который гарантирует, что данные будут синхронизироваться в течение некоторого разумно ограниченного периода времени - сообщение об ошибке/исключении/исключении может привести к тому, что данные будут выйдите из син в течение нескольких секунд, но он должен повторить синхронизацию или, по крайней мере, знать, что она не синхронизирована в течение нескольких секунд.Сохранение состояния в синхронизации между сервером и графическим интерфейсом в реальном времени

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

Подробнее - У меня есть Rich Client (Silverlight, но вероятно, чтобы перейти к Javascript/C# или Java) GUI, который обслуживается промежуточным программным обеспечением типа JMS. Ищу повторно инженер некоторых взаимодействий данных на что-то вроде как следует

Каждый пользователь имеет свой собственный взгляд на несколько достаточно небольших наборов данных для таких элементов, как:

  • Возмещений (что элементы графического интерфейса пользователя для дисплей)
  • GUI данные (например, для заполнения выпадающего меню и т.д.)
  • сетки бизнес-данных (например, сетки заказов)
  • предпочтения (например, как в GUI выложена)

Все эти наборы данных могут быть изменены на сервере в любое время, и данные должны как можно скорее обновляться на клиенте. Данные изменяются с помощью сервера - клиент запрашивает изменение (например, отменяет запрос), и сервер проверяет его против прав и бизнес-правил и обновляет свой внутренний набор данных, который затем отправляет изменение обратно в графический интерфейс. Чтобы обеспечить пользовательскую обратную связь, промежуточное состояние может быть установлено на gui (отменить подано или аналогично), которое превышает количество ответов сервера.

В настоящее время рабочий процесс:

  • Пользователь подтверждает подлинность
  • GUI загружает исходные наборы данных с сервера (которая либо загружает их из базы данных или какой-либо другой бизнес-объекты, он кэшированные)
  • GUI делает
  • GUI загружает снимок бизнес-данных
  • GUI подписывается на обновления для бизнес-данных
  • Как обновления приходят в GUI обновляет модель и вид на экране

Ищу обобщенную библиотеку, которая позволит улучшить на этой

  • Должен быть перекрестным языка, используя формат эффективной полезной нагрузки (например,Java back end, C# front end, формат данных protobuf)
  • Должен быть транспортным агностиком (мы используем промежуточное программное обеспечение стиля JMS, которое мы не хотим заменять прямо сейчас)
  • Клиент должен быть отправлен с обновлением при возникновении изменения на стороне сервера набора данных
  • клиент и сервер должен быть в состоянии проверить изменения, чтобы гарантировать, что они современны
  • данные, посылаемые должны быть минимальными (минимальная дельта)
  • клиент и сервер должен справиться с бытием более чем одна ревизия не синхронизирована
  • Клиент должен иметь возможность кэшировать диск на betwee n, а затем просто получите deltas при входе в систему.

Я думаю, что идеальным решением было бы использовать что-то вроде

  • Любой объект (или объект дерева) может быть зарегистрировано с кодом библиотеки (это должно работать с данными/объектов, загруженных через Hibernate)
  • Когда объект изменяет библиотеку notifys слушателя/обратного вызова с дельтой изменения
  • слушатель посылает, что дельта-клиенту с помощью моего JMS
  • клиент получает обновления и может дать, что обратно в кли которая обновит клиентскую версию объекта
  • Клиент должен получить достаточную информацию из обновления, чтобы иметь возможность решить, какие действия пользовательского интерфейса необходимо предпринять (уведомить пользователя, обновить сетку и т. д.)
  • Клиент и сервер периодически проверяют, что они находятся на одной и той же версии объекта (например, сервер отправляет номер версии клиенту) и может при необходимости исправлять либо дельта отправки сервера, либо полное обновление, если это необходимо.

Спасибо за любые предложения

ответ

0

Ничего себе, это очень много!

У меня есть проект, посвященный аспекту синхронизации этого в Javascipt на переднем конце. В Node.JS существует тестовый сервер (на самом деле это было легко, когда клиент был улажен).

В основном данные хранятся ключом в наборе данных, а каждый отдельный ключ - версией. Сервер имеет все версии всех данных, и Клиент может получать изменения с сервера. Конфликты версий, когда что-то изменяется на обоих клиентах и ​​серверах, обрабатываются обратным вызовом разрешения конфликта.

Это не полная информация, она имеет только магазины памяти в настоящий момент, но это изменится в течение новой недели или около того.

Фактическое уведомление/загрузка и загрузка вне области распространения библиотеки, но вы можете просто использовать для этого Sockets.IO.

В настоящее время он работает с jQuery, Dojo и NodeJS, на самом деле у него практически нет зависимостей.

Проект (с демонстрационной версии) находится по адресу https://github.com/forbesmyester/SyncIt