保持远程对象更新

时间:2011-06-07 13:38:48

标签: java collections tcp client-server rpc

有两个对象 A B ,属于同一个类(例如HashMaps)。

在通过互联网连接的不同计算机上

一个( A )是来源,另一个( B )就像更新的副本一样...

是否有标准/推荐方式让他们“连接”或“更新”?

示例

我正在使用TCP连接和writeObject

  

ObjectOutputStream bufferObj = new ObjectOutputStream(out);

     

bufferObj.writeObject(A)

在复制方面就是这样的

  

ObjectInputStream bufferObj = new ObjectInputStream(in);

     

对象B = bufferObj.readObject();

但是这会产生每次同步都发送整个对象的问题 (例如,定期或每次修改时)

我想要一种发送仅差异(对Java集合特别有用)的方法,但至少知道差异并不是一件容易的事情

我想有这样的事情(过于简单/乐观的计划)

在服务器来源

  

ObjectA.serverUpdatesWarehouseAt(端口);

在客户端副本

  

ObjectTemp.updateItRemotelyFrom(IP,端口);

     

ObjectB.merge(ObjectTemp); //根据需要更新差异添加/删除

这样的事情已经做好了吗?所以我在这里,试图避免重新发明轮子

感谢阅读

3 个答案:

答案 0 :(得分:1)

听起来您可能会受益于分布式哈希地图(http://en.wikipedia.org/wiki/Distributed_hash_table)。

有很多框架提供了这样的功能 - http://code.google.com/p/hazelcast/就是一个例子。

冒着明显的风险 - 如果您的更新率很高,您可以消耗大量带宽,使两者保持同步。

答案 1 :(得分:0)

如果您使用RMI,您可以拥有分布式对象,因此您根本不必担心保持更新。一旦你有了对象的引用(在客户端上),它就会自动与服务器的对象保持同步。

答案 2 :(得分:0)

你可以看看Terracotta这确实是这样的事情。它们允许在JVM之间创建保持同步的共享对象。