在同时具有RMI和Socket连接时如何处理对象?

时间:2016-06-03 20:37:26

标签: java sockets rmi

我正在使用Java创建游戏。我要求游戏玩家可以选择通过RMI连接或Socket连接进行连接。到目前为止,我已经为游戏创建了所有必要的组件,但是在创建RMI连接时,我遇到了一些问题。根据我对RMI的了解,所有用于创建连接的对象都需要声明为Remote(例如,实现Serializable接口)。看到我必须创建两种类型的连接,我不认为序列化到目前为止创建的所有对象是合理的。在这一点上,我可以想到两个可能的解决方案:

  1. 为连接创建必要对象的远程版本(例如,通过创建扩展所述对象的类并实现Serializable接口以使对象成为远程)。执行此操作后,我可以定义适用于客户端可以调用的远程对象的方法。
  2. 创建这种新类型的远程对象,这些对象只是接收来自客户端的请求的消息,并且"翻译"将它们发送到非远程对象,然后继续执行所请求的操作。
  3. 我是Java的新手,我很感激你在这个问题上的时间和耐心。

1 个答案:

答案 0 :(得分:0)

  

根据我对RMI的了解,所有用于创建连接的对象都需要声明为Remote(例如实现Serializable接口)。

你没有在任何地方阅读过。它甚至没有意义。实施Remote不会生成对象Serializable。你必须

  1. 设计扩展 Remote的远程界面
  2. 确保通过此接口传递或返回的每个对象都实现Serializable,或者在极少数情况下,实现远程接口。
  3. 编写接口的实现,通常扩展UnicastRemoteObject
  4. 如果(2)处有任何远程对象,请重复。

      

    看到我必须创建两种类型的连接,我认为序列化到目前为止创建的所有对象并不合理。

    您对(2)没有任何选择,尽管这不太可能包括到目前为止创建的所有对象。在任何情况下,您都必须为计划通过套接字发送的对象执行此操作。

      

    此时我可以想到两种可能的解决方案:

         
        
    1. 为连接创建必要对象的远程版本(例如,通过创建扩展所述对象的类并实现Serializable接口以使对象远程)。
    2.   

    这只是废话。

      

    执行此操作后,我可以定义适用于客户端可以调用的远程对象的方法。

    这与我的第1步相对应。

      
        
    1. 创建这种新类型的远程对象,这些对象只是从客户端接收请求的消息,并将它们“转换”为非远程对象,然后继续执行所请求的操作。
    2.   

    这也是无稽之谈。