2

我对java RMI相当陌生,并且正在尝试创建一个Peer 2 Peer bit torrent之类的应用程序,其中同一对等的多个实例可能在同一台机器上。这意味着我需要能够在同一台机器上注册多个相同类型的远程对象。RMI 注册表似乎只允许我在任何机器上拥有一个远程对象的实现,因为注册表无法区分它应该返回哪个对象的引用。有没有办法绕过注册表,例如通过指定我知道其他对等方正在公开其远程对象的 IP 和端口?如果没有,您是否有任何想法如何在同一台机器上创建同一对象的多个实例?对此的任何帮助将不胜感激......

4

2 回答 2

3

您可以在不同的端口上启动多个 rmi 注册表,或者更好地将对象的实例绑定到不同的名称下。但最好的方法可能是在代码中执行逻辑并在每次需要时返回一个新的远程对象。例如取决于一个参数:

public MyRemoteObject connect(String name) throws java.rmi.RemoteException {
    if("first".equals(name)){
         return firstinstance;
    }else if("new".equals(name)){
         return new MyRemoteObject();
    }
    ...
}

或类似的东西......

于 2011-06-17T14:07:41.557 回答
1

我建议您忘记 RMI - 恕我直言,此技术不适用于您的用例。

为自己定义一个包含序列化和反序列化逻辑的网络协议,并将其用于在原始套接字连接上发送和接收数据。

于 2011-06-17T14:11:25.657 回答