【发布时间】:2014-10-02 20:27:00
【问题描述】:
我正在尝试了解 Oracle 的 Java 的 RMI 教程,但我有一些问题。作为参考,教程链接在这里:
- 服务器代码:http://docs.oracle.com/javase/tutorial/rmi/implementing.html
- 客户代码:http://docs.oracle.com/javase/tutorial/rmi/client.html
1) 在服务器示例中,主函数的最后一行是:System.out.println("ComputeEngine bound");。正常执行会说此时,主函数退出并且程序终止。但是,某些原因导致程序阻塞。有谁知道为什么在运行服务器时程序会阻塞(而不是在打印计算引擎绑定后退出)?
2) 关于上一个问题,服务器似乎正在阻塞并侦听端口。它在监听哪个端口? RMIRegistry 如何知道服务器正在监听哪个端口?
3) 我的另一个问题是当客户端从 RMIRegistry 获取存根(使用 registry.lookup)然后在这个存根上调用 executeTask 时,计算是在运行 RMIRegistry 的机器上发生,还是在运行 RMIRegistry 的机器上发生?服务器代码?即,存根是否告诉 RMIRegistry 在位于注册表或服务器的 main 函数中的 computeEngine 实例上运行 executeTask?
【问题讨论】: