Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaRMI-了解Oracle教程_Java_Rmi - Fatal编程技术网

JavaRMI-了解Oracle教程

JavaRMI-了解Oracle教程,java,rmi,Java,Rmi,我试图理解Oracle的RMI java教程,我有一些问题。本教程链接到此处以供参考: 服务器代码: 客户端代码: 1) 在服务器示例中,主函数的最后一行是:System.out.println(“ComputeEngine绑定”)。正常执行会说,此时,主函数退出,程序终止。但是,某些原因导致程序阻塞。有人知道为什么在运行服务器时程序会阻塞(而不是在打印计算引擎绑定后退出)吗 2) 关于上一个问题,服务器似乎正在阻塞并侦听端口。它在哪个端口监听?注册中心如何知道服务器正在监听哪个端口 3)

我试图理解Oracle的RMI java教程,我有一些问题。本教程链接到此处以供参考:

  • 服务器代码:
  • 客户端代码:
1) 在服务器示例中,主函数的最后一行是:
System.out.println(“ComputeEngine绑定”)。正常执行会说,此时,主函数退出,程序终止。但是,某些原因导致程序阻塞。有人知道为什么在运行服务器时程序会阻塞(而不是在打印计算引擎绑定后退出)吗

2) 关于上一个问题,服务器似乎正在阻塞并侦听端口。它在哪个端口监听?注册中心如何知道服务器正在监听哪个端口


3) 我的另一个问题是,当客户端从RMIRegistry(使用
registry.lookup
)获取存根,然后在此存根上调用
executeTask
时,计算是在运行RMIRegistry的机器上进行的,还是在运行服务器代码的机器上进行的?i、 e.存根是否告诉RMI注册表在注册表中或服务器的
main
函数中的
computeEngine
实例上运行
executeTask
。在这些线程死亡之前,程序不会终止

它将0指定为端口,这意味着它使用一个随机端口,操作系统为其定义范围

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

  • RMI为它正在侦听的每个端口创建一个接受线程。只有当在相应端口上导出的所有远程对象都未被显式或通过DGC导出时,这些线程才会退出
  • 它正在侦听您在构造或导出远程对象时指定的任何端口,或者侦听系统分配的端口(如果未指定),或者侦听指定的零。注册表不知道那是什么端口,但存根知道
  • 计算发生在导出远程对象的主机上,但通常是与注册表相同的主机,因为很难(但并非不可能)将远程对象绑定到不同主机中的注册表

  • 谢谢这很有帮助。再加上:“注册中心如何知道服务器正在监听哪个端口?”它嵌入到存根中。但它只需要知道,对于DGC目的,这是由注册JVM中的RMI运行时系统执行的。注册表本身根本不需要知道端口。它指定了您指定的任何端口,如果不需要,则指定为零。操作系统提供随机端口本身,而不仅仅是范围。