2012-01-12 2 views
0

Пытаюсь лет построить приложение клиент-сервер с помощью:здание клиент-сервер окна приложений

C#, MySQL Server

идея < у меня есть два компьютера (клиенты) подключаются к другому компьютеру (серверу)

, как показано здесь: enter image description here

мои вопросы:

  1. , как показывают данные в реальном времени в обоих клиентов, когда один изменить таблицу, вид будет изменен на другой ПК
  2. как построить метод для управления доступом клиентов к общим ресурсам (дБ) для предотвращения ошибок -

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

+1

довольно широкий вопрос ...:/ –

+0

Это очень трудный вопрос, так как вы не знаете, какой _kind_ сервера вы собираетесь строить. Получение уведомлений об изменениях из службы WCF полностью отличается от получения уведомлений об изменениях на необработанном TCP-соединении (например, поскольку под капотом обратный вызов службы использует ту же технологию, но с несколькими другими уровнями абстракции между ними). – Nuffin

+0

только что обновил мой вопрос – Yahia

ответ

0

Во-первых, вы можете рассмотреть средний уровень, который взаимодействует с обоими клиентами и БД (ASP?, COM?, Custom Built?). В противном случае индивидуальным клиентам, скорее всего, понадобятся таймеры для проверки последнего обновления базы данных.

AFA проблема совместного использования, база данных. Базы данных предназначены для одновременного доступа, поэтому ... не уверены в части ошибки. Я использую C#, и действительно волнуюсь, у ADO.NET есть «пессимистический» режим для подключения к БД, но ценой производительности.

1

Существует два широких подхода на выбор.

1) Попросите каждого клиента периодически опросить сервер для получения обновлений. Не рекомендуется, но легко реализовать.
2) Сообщите серверу об изменениях клиентов. Гораздо эффективнее, но может быть сложно реализовать.

1

уведомлять клиентов об изменениях от другого клиента, вы должны сделать следующее:

  1. Помимо ваших соединительных нитей вы должны хранить ссылки на все подключенные в данный момент клиентов, в какой-то синхронизированной коллекции (чтобы убедиться, что не являются условиями гонки).
  2. Теперь, если какой-либо клиент совершает какие-либо изменения, сервер выполняет итерацию по другим клиентам и уведомляет каждого из них об изменении, либо с сообщением «Сущность X изменилось, вы должны загрузить его снова», либо просто нажав обновленный к клиенту, надеясь, что клиент будет реагировать соответствующим образом.
  3. Если вы используете первый подход, у клиента теперь есть выбор либо загрузить обновленный объект, либо загрузить его, когда он будет доступен в следующий раз. Второй подход заставит клиента кэшировать данные (или нет, поскольку клиент может просто кэшировать идентификатор и перезагрузить объект в другое время, как если бы сервер только что уведомил об этом обновление, как в первом подходе).

Если вы можете (по какой-либо причине) не доверять безопасности одновременного доступа к базе данных, вы должны использовать что-то вроде однопоточной очереди задач (в простейшем случае ... Есть более оптимизированные подходы, которые позволяют параллельные действия чтения и приоритизации и такие, но реализация которых составляет действительно боль).

Смежные вопросы