首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Java理解Oracle教程

Java理解Oracle教程
EN

Stack Overflow用户
提问于 2014-10-02 20:27:00
回答 2查看 663关注 0票数 0

我正在尝试理解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对驻留在注册表中或服务器的main函数中的computeEngine实例运行executeTask

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-10-02 20:32:33

RMI创建后台侦听线程。在这些线程死掉之前,程序不会终止。

它指定0作为端口,这意味着它使用操作系统定义范围的随机端口。

存根封装TCP/IP调用,以通知服务器调用该方法。所以实际的实现运行在承载代码的服务器上。如果在服务器代码上放置println,则在调用该函数时会看到它打印出来。

票数 2
EN

Stack Overflow用户

发布于 2016-02-28 00:15:41

  1. RMI为它侦听的每个端口创建一个接受线程。只有当所有在相应端口上导出的远程对象都未导出时,这些线程才会退出,无论是显式地还是通过DGC。
  2. 它正在侦听您在构建或导出远程对象时指定的任何端口,或者如果您没有指定一个或指定为零,则侦听系统分配的端口。注册表不知道它是什么端口,但是存根知道。
  3. 计算发生在从远程对象导出的主机上,但通常是与注册表相同的主机,因为很难(但并非不可能)将远程对象绑定到另一个主机中的注册表。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26169097

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档