Клиент-Сервер - Идентичная модель - PullRequest
1 голос
/ 21 марта 2012

Я и некоторые люди в школе строим календарную встречу и систему встреч в качестве проекта. Дело в следующем:

У каждого сотрудника в бизнесе есть свой «календарь» со встречами и встречами. Конечно, они могут добавлять их и приглашать других сотрудников на собрания и так далее. Модель состоит из примерно 5-6 разных классов. Каждый клиент будет подключаться к серверу (который сохраняет данные в базе данных). Когда изменение сделано в модели на клиенте. Модель на сервере должна обновляться и обновляться на любом другом подключенном клиенте.

Общий вопрос следующий: Что мы должны сделать, чтобы убедиться, что каждый подключенный клиент к серверу, а также к серверу, имеет одинаковую обновленную модель?

Надеюсь, я ясно дал понять :) (Правка: я не сделал:)

EDIT: Сервер и клиенты должны иметь одинаковую модель. Могу ли я передавать несколько объектов через сокеты? Если объекты должны были быть переданы в виде текста, каков наилучший способ сделать это, чтобы объекты могли быть правильно настроены на сервере или на клиентах?

1 Ответ

2 голосов
/ 21 марта 2012

Мне первое утверждение несколько противоречит последнему утверждению.Он говорит:

У каждого сотрудника есть свой календарь с собраниями и встречами.

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

Модель на сервере должна обновляться и обновляться на любом другом подключенном клиенте.

Я бы разделил вашмодели в business (при условии, что вы поддерживаете несколько предприятий), employee (client), calendar, event (meeting/appointment) и все остальное, что имеет отношение.

Вам необходимо убедиться, что собственный календарь клиента синхронизирован сСервер, очевидно, и получить это работает в первую очередь.Затем вы захотите иметь событие, которое обрабатывается, когда Сотрудник A попросил Сотрудника B присутствовать на собрании, для чего потребуется отправить Сотруднику B приглашение для принятия или отклонения собрания, которое затем может быть обновлено на сервере, а затемреплицируется на заинтересованных клиентов.

Я бы реализовал это как модель извлечения, а не как модель push (в духе традиционных реализаций), где клиент "опрашивает" сервер каждые x интервал, чтобы спроситьдля последней информации для их календаря.Любые сделанные ими изменения возвращаются на сервер, а затем сервер обновляет базу данных по мере необходимости.

Это означает, что вы можете счастливо синхронизировать все на сервере, а когда клиент запрашивает последнюю информацию,Сервер просто отправляет их обратно, а затем клиент обновляет их по мере необходимости.

Таким образом, сервер может обрабатывать любые проблемы синхронизации с событиями, возвращая уведомления, где возникают проблемы синхронизации.Подумайте, например: если сотрудник B принимает собрание, а затем сотрудник A отменяет собрание до синхронизации всех клиентов.Вы можете просто отправить уведомление сотруднику B, сообщив, что, не беспокоясь о том, что все клиенты находятся в одном состоянии.

Надеюсь, это поможет.

:: Редактировать (основано на редактировании вопроса) ::

Возможно, вы захотите проверить Сериализация и способы ее реализации.Я хотел бы создать объект передачи данных (DTO), который инкапсулирует данные, которые вы хотите отправить, а затем сериализует их и отправляет клиенту.Клиент десериализует данные в объект (ы), которые он должен использовать.Думайте об этом как о конверте, который сгруппирует ваши объекты и отправит их клиенту, когда он в этом нуждается.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...