什么是“服务器”上的存根,骨架是什么意思?

时间:2011-12-21 07:11:29

标签: java networking network-programming rmi

stub 在服务器端做了什么?什么是骨架

from wikipedia

这是来自维基百科的图表。我在服务器计算机和客户端计算机上都安装了存根。我知道存根有助于客户端的网络连接但是存根在服务器端做了什么?

在上图中,骨架是什么意思?

7 个答案:

答案 0 :(得分:16)

看下面的图片:

skeleton

简而言之,存根骨架是网络服务设置中的对应物。 Skeleton belongs to service provider sidestub belongs to receiver side。在较低级别,存根和骨架相互通信。

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

答案 1 :(得分:6)

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

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

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

http://docs.oracle.com/javase/7/docs/platform/rmi/spec/rmi-arch2.html

http://www-itec.uni-klu.ac.at/~harald/ds2001/rmi/rmi.html

答案 2 :(得分:4)

你需要做的第一件事就是忘记骷髅。它们已经淘汰了13年。

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

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

答案 3 :(得分:3)

理解“存根”和“骷髅”的关键是理解marshalling的概念:

rmiregistry只是一个查找工具;而已。当服务器执行bind()时,它会使用rmiregistry“注册”自己。当客户端执行lookup()时,他会检查服务器上注册的内容。没什么,没什么。

我认为对“骨骼”这样的术语进行狡辩是不合理的。如果您愿意,可以将所有内容称为“存根”。关键是,两者都是PROXIES,都是MARSHALLING,一端存在于客户端下(客户端调用),另一端存在于服务器上(骨架调用实际的服务器代码)。

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

答案 4 :(得分:0)

存根

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

或者,考虑在一台机器上运行的程序:每个方法都是一个分支。将方法移动到远程计算机时,切断分支,留下仅包含通信的存根 Source

enter image description here

骨架

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

我认为骨架是第一个实现 - 满足调用约定的东西,执行部分操作,并且令人满意地完成。

表格Oracle

答案 5 :(得分:0)

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

骨骼 远程对象的框架是服务器端实体,该实体将调用分派到实际的远程对象实现。

答案 6 :(得分:-1)

我只会解决为什么存根需要在服务器端以及客户端的问题。另一个问题已经得到解答。

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

这是一个典型的场景。

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

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