1

我正在使用 Java 远程方法调用 (RMI) 测试 Web 应用程序。当我通过加密狗、宽带连接到互联网时;RMI 需要很长时间才能响应请求。完成方法调用大约需要 10 秒。我还可以在进行方法调用后立即看到 Internet 连接中的数据传输率上升。所以肯定它似乎是通过外部网络在两个内部进程之间建立 RMI 连接。

虽然与互联网断开连接,但它的响应速度很快,比如几毫秒。我的 /etc/hosts 文件有 127.0.0.1 localhost 的条目。我总是在方法调用 url 中使用 127.0.0.1 来命名.lookup。但是当我连接到互联网时,无法弄清楚如何让机器快速响应 RMI 调用。有什么建议么?

4

1 回答 1

6

您的问题不是您用于对 RMI 注册表的查找调用的地址,而是 URL 中的地址是调用查找的结果。这默认为系统上第一个接口的 IP 地址,所以我的猜测是,当您连接到 Internet 时,它就是您的外部连接。

我认为正在发生的事情是您在 127.0.0.1 上调用 RMI 注册表,这会返回您的 Internet 地址以及您想要的服务的位置,因此您的 RMI 调用通过加密狗接口路由出去。

您需要设置java.rmi.server.hostname属性以告诉 RMI 注册表在其 RMI URL 中返回哪个主机名或 IP 地址。

所以你需要类似的东西:

String ipAddress = "10.1.2.3"; //Local IP address 
System.setProperty("java.rmi.server.hostname",ipAddress);

或者

String hostname = "myserver"; //hostname that resolves for a local address
System.setProperty("java.rmi.server.hostname",hostname);
于 2012-07-05T11:48:39.067 回答