我正在尝试理解Oracle的java RMI教程,我有一些问题。为便于参考,本教程在这里链接:
1)在服务器示例中,主函数的最后一行是:System.out.println("ComputeEngine bound");
。正常执行会说,此时,主函数退出,程序终止。但是,有些东西导致程序阻塞。有人知道为什么在运行服务器时程序会阻塞(而不是在打印计算机引擎绑定后退出)?
2)与前面的问题相比,服务器似乎在阻塞并侦听端口。它在监听什么端口?RMIRegistry如何知道服务器正在监听哪个端口?
3)我的另一个问题是,当客户端从RMIRegistry (使用registry.lookup
)获取存根,然后在这个存根上调用executeTask
时,计算是发生在运行RMIRegistry的机器上,还是在运行服务器代码的机器上?也就是说,存根是否告诉RMIRegistry对驻留在注册表中或服务器的main
函数中的computeEngine
实例运行executeTask
?
发布于 2014-10-02 20:32:33
RMI创建后台侦听线程。在这些线程死掉之前,程序不会终止。
它指定0作为端口,这意味着它使用操作系统定义范围的随机端口。
存根封装TCP/IP调用,以通知服务器调用该方法。所以实际的实现运行在承载代码的服务器上。如果在服务器代码上放置println,则在调用该函数时会看到它打印出来。
发布于 2016-02-28 00:15:41
https://stackoverflow.com/questions/26169097
复制相似问题