我在计算机上的两台虚拟机之间创建了一个测试程序。所以我在VMware上的虚拟机上运行了RMI服务器,并且我在VMware上的另一个虚拟机上运行了RMI客户端。
我使用SslRMIServerSocketFactory
和SslRMIClientSocketFactory
设置了SSL,并且可以从客户端调用方法到服务器,让服务器响应返回值。所以现在我在VMware上运行了两台Ubuntu机器。
当客户端调用服务器时,我必须等待大约17秒,直到服务器的响应到达客户端并且在控制台上执行打印。 已更新:该方法的通话速度很快。所有这些时间都由Registry.lookup()
函数执行。
阿伦17秒太多时间了? 我知道虚拟机本质上是缓慢的,加上SSL正在运行,但仍然不是17秒,我正在做什么?远程方法只添加两个整数并返回结果。
谢谢。
答案 0 :(得分:1)
出于安全考虑,Java会在连接或接受套接字时反向DNS。您没有关于客户端上可用服务器的任何DNS或反向DNS信息,也没有关于服务器上可用客户端的任何DNS或反向DNS信息。将服务器条目放入客户端的/etc/hosts
文件,并将客户端条目放入服务器的/etc/hosts
文件中。否则,它会尝试通过DNS服务器和超时等待响应,然后继续。
答案 1 :(得分:0)
我在将RMI客户端连接到同一台计算机上的RMI服务器时遇到了同样的问题。 在我的情况下,甚至在服务器中实例化继承自 UnicastRemoteObject 的对象也会导致延迟超过20秒。使用localhost配置/ etc / hosts并没有解决问题,我必须在使用RMI之前在我的java应用程序中使用这一行:
System.setProperty("java.rmi.server.hostname", "127.0.0.1");