Передача HashMap между клиентом и сервером с использованием сокетов (JAVA) - PullRequest
1 голос
/ 03 марта 2010

Я работаю над проектом JAVA, в котором есть несколько терминалов.Эти терминалы действуют как клиенты и серверы.Например, если есть 3 терминала A, B и C. Тогда в любой данный момент времени один из них скажет A, будет клиент, делающий широковещательный запрос.Два других терминала, B и C, ответят.Я использую сокеты, чтобы заставить их общаться.Как только ответ получен от всех других терминалов, А проверит пул каналов, чтобы узнать, свободен ли какой-либо из каналов.Он занимает свободный канал и делает его доступным false.

Пул каналов реализован с использованием HashMAp:

HashMap channelpool = new HashMap ();

channelpool = 1 = true, 2 = true, 3 = false, 4 = true, 5 = true, 6 = true, 7 = true, 8 = true, 9 = true, 10 = true

Итак, изначально все каналы имеют значение true,любой терминал может принимать любой канал.Но как только канал занят, ему присваивается значение «ложь» на период использования, а затем сбрасывается значение «истина».

Теперь этот Hashmap должен быть распределен между распределенными терминалами.Также это должно быть в курсе.Я не могу использовать общий ресурс между терминалами для хранения HashMap. Может кто-нибудь подсказать мне простой способ переноса HashMap между терминалами.Я буду признателен, если кто-то может указать мне на сайт, который обсуждает это.

Ответы [ 3 ]

3 голосов
/ 03 марта 2010

Ваши проблемы начинаются намного раньше, чем при отправке HashMap через сокет. Как вы гарантируете, что только один процесс за раз модифицирует карту? Если два процесса модифицируют карту, как вы объединяете изменения одинаковым образом для каждого процесса?

Но чтобы ответить на ваш вопрос: сериализация HashMap с использованием java.io.ObjectOutputStream , а затем реконструкция его на другой стороне с использованием ObjectInputStream, должны помочь.

1 голос
/ 03 марта 2010

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

0 голосов
/ 04 мая 2010

Нет необходимости в RMI или сериализации объектов. Ваш сервер (ы) должен иметь Hazelcast распределенную карту . JVM вашего клиента должны использовать Hazelcast Client для доступа к общей распределенной карте. Клиенты могут прослушивать события распределенной карты.

Hazelcast - это сервис с открытым исходным кодом (лицензия Apache), транзакционная, распределенная реализация карт, мультикарты, очереди, темы, блокировки и исполнителя для Java.

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