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

存根在服务器端做什么? 什么是骨架

来自维基百科

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

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

看看下面的图片:

骨架

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

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

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

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

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

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

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

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

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

理解“存根”和“骨架”的关键是理解编组的概念:

  • 什么是数据编组?

  • 编组(计算机科学)

  • RPC如何工作

rmir​​egistry只是一个查找工具; 而已。 当服务器执行bind() ,它会向rmir​​egistry “注册”自己。 当客户端执行lookup() ,他会检查服务器上注册的内容。 没有更多,没有更少。

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

希望,我的解释和示例有助于您的另一个链接 (至少一点点)。

存根

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

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

在此处输入图像描述


骨架

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

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

形成Oracle

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

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

这是一个典型的场景。

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

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