Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.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
Java “文件”上的存根是什么;服务器";骷髅是什么意思?_Java_Networking_Network Programming_Rmi - Fatal编程技术网

Java “文件”上的存根是什么;服务器";骷髅是什么意思?

Java “文件”上的存根是什么;服务器";骷髅是什么意思?,java,networking,network-programming,rmi,Java,Networking,Network Programming,Rmi,存根在服务器端做什么?什么是骷髅 这是维基百科上的图表。我在服务器机器和客户端机器上都安装了存根。我知道存根在客户端的网络中很有帮助,但是存根在服务器端做什么呢 同样在上图中,“骨架”是什么意思?存根和骨架都隐藏了一些复杂性 存根隐藏了参数的序列化和网络级通信,以便向调用者提供简单的调用机制 骨架负责将调用分派到实际的远程对象实现 你需要做的第一件事就是忘记骨架。自1998年以来,它们已经过时 存根在导出时由远程对象创建。然后,它要么绑定到注册表并由客户端通过查找获得,要么作为另一个远程方法

存根在服务器端做什么?什么是骷髅

这是维基百科上的图表。我在服务器机器和客户端机器上都安装了存根。我知道存根在客户端的网络中很有帮助,但是存根在服务器端做什么呢


同样在上图中,“骨架”是什么意思?

存根和骨架都隐藏了一些复杂性

存根隐藏了参数的序列化和网络级通信,以便向调用者提供简单的调用机制

骨架负责将调用分派到实际的远程对象实现


你需要做的第一件事就是忘记骨架。自1998年以来,它们已经过时

存根在导出时由远程对象创建。然后,它要么绑定到注册表并由客户端通过查找获得,要么作为另一个远程方法的结果直接返回给客户端

然后,客户端使用存根作为相关远程接口的实现,执行RMI的网络部分,与服务器JVM交互,最终在远程对象中调用客户端在存根中调用的相同方法。

理解“存根”和“骨架”的关键是为了理解以下概念:

这只是一个查找工具;没别的了。当服务器执行
bind()
时,它将自己“注册”到。当客户端执行
查找()
时,他会检查服务器上注册的内容。不多不少

我认为对“骷髅”这样的术语吹毛求疵是没有意义的。如果你愿意,你可以把所有东西都称为“存根”。关键是,两者都是代理,都做封送处理,一方存在于客户机下(客户机调用),另一方存在于服务器上(骨架调用实际的服务器代码)


希望我的解释和示例对您的帮助有所帮助(至少有一点)。

我将只讨论为什么存根需要位于服务器端和客户端的问题。另一个问题已经得到了回答

当导出的远程对象作为方法参数或返回值传递给远程对象时,会发生以下情况。在服务器计算机上创建存根。然后,它被序列化,通过网络发送到客户机,并在那里反序列化以生成存根的相同副本。之后,客户机上不再需要存根

这是一个典型的场景

  • 在机器S上,创建并导出对象S。
    • 导出的一部分是为s创建存根;电话是ss0
  • 计算机S以S为参数调用Naming.bind。
    • 服务器端存根ss0被序列化并发送到注册表的机器R
    • ss0的序列化版本用于创建ss0 R的副本;称之为ss1
    • R上的注册表保留一个指向ss1的指针

因此,在服务器端拥有存根的一个用途是,它可以被序列化并(它的副本)发送到其他机器,例如作为绑定的一部分。以类似的方式,当客户端执行查找时,注册表序列化其副本(ss1)并将其发送给客户端。

请看下图:

简而言之,存根骨架是web服务设置中的对应项<代码>框架属于服务提供商端,而
存根属于接收方端
。在较低级别,存根和骨架相互通信

从客户端,业务对象与存根对象通信,存根负责形成消息并调用web服务。调用完成后,在服务提供者端,skeleton是存根的并行对象,它接收请求消息并理解它,并将信息传递给服务端业务对象。

stub 远程对象的存根充当远程对象的客户端本地代表或代理。存根隐藏了参数的序列化和网络级通信,以便向调用者提供简单的调用机制

P>可选地,考虑在一台机器上运行的程序:每个方法是一个分支。将方法移动到远程计算机时,会切断分支,留下只包含通信的存根。


骨架 在远程JVM中,每个远程对象可能有一个对应的框架。骨架负责将调用分派到实际的远程对象实现

我把框架看作是第一个实现——满足调用约定、执行部分操作并圆满完成的东西

表格存根: 存根是一个小程序例程,可以替代较长的程序,可能稍后加载或位于远程

骨架
远程对象的框架是一个服务器端实体,它向实际的远程对象实现发送调用。

服务器机器上的存根是否被称为框架?客户机上的同一存根?骨架只是服务器端的存根。我想。我已经很久没有在大学里使用RMI了……:)它与客户端机器上的存根有何不同?区别正是我在回答中所描述的:存根负责将对java对象的调用编组(转换)为网络级别的“调用”,而框架的作用相同,但顺序相反。它将网络级别的“调用”解组(转换回)为java类调用?你能解释一下吗