有两个对象 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); //根据需要更新差异添加/删除
这样的事情已经做好了吗?所以我在这里,试图避免重新发明轮子
感谢阅读
答案 0 :(得分:1)
听起来您可能会受益于分布式哈希地图(http://en.wikipedia.org/wiki/Distributed_hash_table)。
有很多框架提供了这样的功能 - http://code.google.com/p/hazelcast/就是一个例子。
冒着明显的风险 - 如果您的更新率很高,您可以消耗大量带宽,使两者保持同步。
答案 1 :(得分:0)
如果您使用RMI,您可以拥有分布式对象,因此您根本不必担心保持更新。一旦你有了对象的引用(在客户端上),它就会自动与服务器的对象保持同步。
答案 2 :(得分:0)
你可以看看Terracotta这确实是这样的事情。它们允许在JVM之间创建保持同步的共享对象。