通过 RMI 使用反序列化对象更新服务器对象
Updating server object with deserialized object through RMI
我在服务器上有一个对象,客户端可以在分布式系统中检索该对象。这一切都发生在本地机器上,客户端通过 RMI 查找调用服务器对象。关键是服务器对象应该是客户端可以修改的一个对象。但是在客户端反序列化之后,它们都有不同的对象 ID。也就是说,他们似乎获得了一个新对象,即使他们都应该从服务器检索相同的对象。这是有道理的,考虑到对象应该在不同的机器上(每个客户端)。
我已尝试在服务器对象上实现 hashcode 和 equals 方法,但客户端仍然获得不同的对象 ID。当客户端对反序列化的服务器对象执行操作时,原始服务器对象不会收到更改。我知道这一点,因为任何后续查找都会以其原始状态检索服务器对象。
基本上我的问题是:如何让我的客户端通过对相应的反序列化对象执行客户端操作来更新原始服务器对象?当另一个客户端查看其反序列化对象的 getter 时,它必须看到其他客户端执行的所有更改。为了进一步澄清,尽管对象在不同的机器上被反序列化,但我希望它们表现得好像它们是同一台机器上的同一个对象。
The point is that the server object is supposed to be one single object which clients can modify. However after it's deserialized at the clients, they all have a different object ID
关键是这不是一个远程对象,所以它被序列化了,这是你不想要的。
I want them to behave as if they were one and the same object on the same machine.
没错。您需要:
- 让它实现远程接口
- 通过扩展
UnicastRemoteObject
(首选)或在构建时调用 UnicastRemoteObject.exportObject()
来导出它。
我在服务器上有一个对象,客户端可以在分布式系统中检索该对象。这一切都发生在本地机器上,客户端通过 RMI 查找调用服务器对象。关键是服务器对象应该是客户端可以修改的一个对象。但是在客户端反序列化之后,它们都有不同的对象 ID。也就是说,他们似乎获得了一个新对象,即使他们都应该从服务器检索相同的对象。这是有道理的,考虑到对象应该在不同的机器上(每个客户端)。
我已尝试在服务器对象上实现 hashcode 和 equals 方法,但客户端仍然获得不同的对象 ID。当客户端对反序列化的服务器对象执行操作时,原始服务器对象不会收到更改。我知道这一点,因为任何后续查找都会以其原始状态检索服务器对象。
基本上我的问题是:如何让我的客户端通过对相应的反序列化对象执行客户端操作来更新原始服务器对象?当另一个客户端查看其反序列化对象的 getter 时,它必须看到其他客户端执行的所有更改。为了进一步澄清,尽管对象在不同的机器上被反序列化,但我希望它们表现得好像它们是同一台机器上的同一个对象。
The point is that the server object is supposed to be one single object which clients can modify. However after it's deserialized at the clients, they all have a different object ID
关键是这不是一个远程对象,所以它被序列化了,这是你不想要的。
I want them to behave as if they were one and the same object on the same machine.
没错。您需要:
- 让它实现远程接口
- 通过扩展
UnicastRemoteObject
(首选)或在构建时调用UnicastRemoteObject.exportObject()
来导出它。