我正在使用Java远程方法调用(RMI)测试Web应用程序。当我通过加密狗连接到互联网,宽带; RMI需要很长时间才能响应请求。完成方法调用大约需要10秒钟。一旦我进行方法调用,我还可以看到互联网连接中的数据传输速率上升。所以肯定似乎是通过外部网络在两个内部进程之间建立RMI连接。
在与互联网断开连接时,它的响应变化很快,就像在几毫秒内一样。我的/ etc / hosts文件包含127.0.0.1 localhost的条目。我总是在方法调用url中使用127.0.0.1来进行naming.lookup。但是当我连接到互联网时,无法弄清楚如何让机器快速响应RMI呼叫。有什么建议?
答案 0 :(得分:5)
您的问题不是您用于对RMI注册表进行查找调用的地址,而是URL中的地址,该地址是查询调用的结果。这默认为系统上第一个接口的IP地址,所以我的猜测是,当你连接到互联网时,它就是你的外部连接。
我认为发生的事情是您在127.0.0.1上调用RMI注册表,这会将您的Internet地址返回到您想要的服务位置,因此您的RMI调用将通过加密狗接口路由出来。 / p>
您需要设置the java.rmi.server.hostname
property以告知RMI注册管理机构在其RMI网址中返回哪个主机名或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);