2013-10-15 14 views
1

Я хочу написать приложение/сервер Java-клиент, который должен сделать следующее:Java Client-Server - Раздача файлов на нескольких серверах

  • Клиент подключается к одному из двух серверов
  • Сервер отправляет текст файл или его содержание клиента
  • Пользователь редактирует файл
  • Клиент отправляет файл обратно одновременно в обоих серверах и надежно
  • Клиент закрывает приложение

Бонус: Один из этих серверов может отсутствовать во время передачи, поэтому ему необходимо получить файл при запуске.

Какая архитектура или структура были бы хорошими и легкими, чтобы это можно было сделать? Является ли JGroups хорошим началом?

редактировать: я должен предположить следующую минимальную сеть:

  • Один или несколько клиентов запуска приложения, но не должно быть разрешено редактировать файл одновременно.
  • Есть один или несколько серверов, из которых по крайней мере один всегда активен (который один является своего рода случайным образом)
  • Клиент имеет XML-файл со всеми адресами серверов
+0

Если это подразумевается как кластерное решение (другими словами: оба сервера находятся в одной сети), рассмотрите возможность использования общей файловой системы, это, безусловно, самое простое решение. – nablex

+0

Это, безусловно, было бы самым удобным, но, к сожалению, это не вариант для меня. Спасибо, в любом случае. – FoxDie

ответ

0

JMS каркасных (ActiveMQ) может решить вашу проблему с помощью очереди и тема:

  • клиента посылает сообщение в очереди, где оба сервера слушают, прошу файл
  • только один сервер принимает эти запросы и посылает файл на клиент
  • клиент редактирует файл
  • клиент посылает отредактированный файл на DURABLE темы, где оба сервера подписного

Использовании прочную темы важно так форум абонентов (ваши сервера) получить файл, как только они повторно.

+0

Звучит интересно. Я рассмотрю это. Где сохраняется эта прочная тема? Потому что это может быть проблемой, если это произойдет на Клиенте, так как я хочу, чтобы он мог «сгореть и забыть» или просто уйти после того, как он отправил файл. – FoxDie

+0

Управление темой и очередью будет осуществляться брокером JMS (например, ActiveMQ). Это работает как отдельное приложение, которое управляет всем этим сообщением. – coyote

+0

Хорошо. Я думаю, так как мой клиент не остается в сети, брокер должен быть на всех серверах, так как я могу только предположить, что хотя бы один из них остается активным. Я думаю, я бы создал соединение «точка-точка» от моего Клиента к указанному серверу, который, в свою очередь, будет выступать в роли брокера для уведомления всех других серверов нового файла. Имеет ли это смысл? – FoxDie