2011-06-07 4 views
4

Avoir deux objets A, B, de la même classe (par exemple HashMaps).Mise à jour des objets distants

à différents ordinateurs connectés par Internet

One (A ) est la source et l'autre (B ) est tout aussi une copie à jour ...

Y at-il une norme/manière recommandée pour les garder "connectés" ou "mis à jour"?

Exemple

J'utilise une connexion TCP et writeObject

ObjectOutputStream bufferObj = new ObjectOutputStream (out);

bufferObj.writeObject (A)

et quelque chose de côté copie comme celui-ci

ObjectInputStream bufferObj = new ObjectInputStream (in);

Objet B = bufferObj.readObject();

Mais cela a le problème que l'objet entier est envoyé dans chaque synchronisation (par exemple périodiquement ou chaque fois qu'une modification se produit)

Je voudrais une façon d'envoyer uniquement les différences (spécialement utile pour les collections Java), mais connaissant la différence n'est pas une chose facile au moins

Je voudrais avoir quelque chose comme ça (schéma trop simple/optimiste)

A la source du serveur

ObjectA.serverUpdatesWarehouseAt (Port);

à la copie client

ObjectTemp.updateItRemotelyFrom (IP, port);

ObjectB.merge (ObjectTemp); // mettre à jour les différences en ajoutant/en supprimant au besoin

Est-ce que quelque chose comme ceci a déjà été fait? donc je suis ici, en essayant d'éviter de réinventer la roue

grâce à la lecture

Répondre

1

On dirait que vous pourriez bénéficier d'une table de hachage distribuée Carte (http://en.wikipedia.org/wiki/Distributed_hash_table).

Il existe un certain nombre de frameworks qui fournissent une telle fonctionnalité - http://code.google.com/p/hazelcast/ en est un exemple. Au risque de dire l'évidence - si votre taux de mise à jour est élevé, vous pouvez utiliser beaucoup de bande passante en gardant les deux en synchronisation.

+0

+1 pour la Noisette – Grooveek

0

Si vous utilisez RMI, vous pouvez avoir un objet distribué, donc vous n'avez pas à vous soucier de les mettre à jour du tout. Une fois que vous avez une référence à l'objet (sur le client), il est automatiquement synchronisé avec l'objet du serveur.

0

Vous pouvez jeter un oeil à Terracotta qui fait exactement ce genre de chose. Ils permettent la création d'objets partagés entre JVM qui sont synchronisés.

Questions connexes