Держите удаленные объекты обновленными - PullRequest
4 голосов
/ 07 июня 2011

Имеет два объекта A , B одного и того же класса (например, HashMaps).

На разных компьютерах, подключенных к интернету

Один ( A ) является источником, а другой ( B ) является просто обновленной копией ...

Существует ли стандартный / рекомендуемый способ держать их «подключенными» или «обновленными»?

Пример * * тысяча двадцать-один

Я использую TCP-соединение и writeObject

ObjectOutputStream bufferObj = новый ObjectOutputStream (out);

bufferObj.writeObject (А)

и на стороне копирования что-то вроде этого

ObjectInputStream bufferObj = new ObjectInputStream (in);

Объект B = bufferObj.readObject ();

Но проблема в том, что весь объект отправляется при каждой синхронизации (например, периодически или каждый раз, когда происходит изменение)

Мне нужен способ отправки только различий (особенно полезно для коллекций Java) , но знать разницу не просто, по крайней мере

Я бы хотел что-то подобное (слишком простая / оптимистичная схема)

На сервере источника

ObjectA.serverUpdatesWarehouseAt (порт);

У клиента копия

ObjectTemp.updateItRemotelyFrom (IP, порт);

ObjectB.merge (ObjectTemp); // обновляем различия добавляя / удаляя по мере необходимости

Что-нибудь подобное уже сделано? вот и я, стараясь не изобретать велосипед

спасибо за чтение

Ответы [ 3 ]

1 голос
/ 07 июня 2011

Похоже, вы могли бы извлечь выгоду из распределенной хэш-карты (http://en.wikipedia.org/wiki/Distributed_hash_table).

Существует довольно много фреймворков, которые предоставляют такую ​​функциональность - http://code.google.com/p/hazelcast/ является одним из примеров.

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

0 голосов
/ 07 июня 2011

Вы могли бы взглянуть на Терракотовую , которая делает именно такие вещи. Они позволяют создавать общие объекты между JVM, которые синхронизируются.

0 голосов
/ 07 июня 2011

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

...