【问题标题】:RMI: serializable and remote objectsRMI:可序列化和远程对象
【发布时间】:2013-10-25 15:05:12
【问题描述】:

我有一个问题:我正在使用 RMI 在服务器和客户端之间进行通信。

public class RemoteMap
    extends java.rmi.server.UnicastRemoteObject
    implements RemoteMapInterface {

 private TreeMap<String, GeneralSprite> sprites;
...

这是我的远程对象。但我希望客户端能够更改此对象的内容。并且修改后服务器可以基于此执行一些操作。

客户端示例:

map = (RemoteMapInterface) (registry.lookup("map"));
map.getSprites.get("object1").setDx(-1);

我在 GeneralSprite 上使用可串行化,但我猜它是按值传递的。因此,当我对 GeneralSprite 进行一些更改时,它并没有传输到服务器。我是否也必须将 GeneralSprite 设为 Remote 对象?还是有可能?

先谢谢了,抱歉我的英语不好,希望你能理解。

【问题讨论】:

    标签: java rmi serializable remoteobject


    【解决方案1】:

    所有未实现Remote 接口的东西,无论是直接还是间接,都将被序列化以用于远程方法调用。所以这是一种“复制调用”的行为。您可以实现一个新的Map,它实现了Remote,但您也可以在您的RemoteMapInterface 中添加一个类似setDx(String spriteName, int value) 的方法,并在服务器端将其实现为sprites.get(spriteName) .setDx(value);

    【讨论】:

    • 谢谢,终于在您的帮助下解决了这个问题。但最后,我想我不会使用 RMI。我正在开发游戏,所以我需要实时更新我的​​服务器。看起来 RMI 并不是最好的解决方案。无论如何感谢您的回答:)
    • 所有未实现远程或当前未导出的东西都将被序列化。
    猜你喜欢
    • 2011-09-10
    • 1970-01-01
    • 1970-01-01
    • 2015-05-02
    • 1970-01-01
    • 1970-01-01
    • 2016-12-14
    • 2014-09-08
    • 1970-01-01
    相关资源
    最近更新 更多