stub 在服务器端做了什么?什么是骨架?
这是来自维基百科的图表。我在服务器计算机和客户端计算机上都安装了存根。我知道存根有助于客户端的网络连接但是存根在服务器端做了什么?
在上图中,骨架是什么意思?
答案 0 :(得分:16)
看下面的图片:
简而言之,存根和骨架是网络服务设置中的对应物。 Skeleton belongs to service provider side
和stub belongs to receiver side
。在较低级别,存根和骨架相互通信。
从客户端,业务对象与存根对象通信,存根从消息中承担责任并调用Web服务。调用完成后,在服务提供者端,skeleton是存根的并行对象,它接收请求消息并理解它并将信息传递给服务端业务对象。
答案 1 :(得分:6)
存根和骨架都隐藏了一些复杂性。
存根隐藏参数的序列化和网络级通信,以便向调用者提供简单的调用机制。
骨架负责将调用分派给实际的远程对象实现。
http://docs.oracle.com/javase/7/docs/platform/rmi/spec/rmi-arch2.html
答案 2 :(得分:4)
你需要做的第一件事就是忘记骷髅。它们已经淘汰了13年。
存根是远程对象在导出时创建的。然后它被绑定到注册表并由客户端通过查找获得,否则它将作为另一个远程方法的结果直接返回给客户端。
然后,客户端使用存根作为相关远程接口的实现,以执行RMI的网络部分,与服务器JVM交互,最终在客户端在存根中调用的远程对象中调用相同的方法。
答案 3 :(得分:3)
理解“存根”和“骷髅”的关键是理解marshalling的概念:
rmiregistry只是一个查找工具;而已。当服务器执行bind()
时,它会使用rmiregistry“注册”自己。当客户端执行lookup()
时,他会检查服务器上注册的内容。没什么,没什么。
我认为对“骨骼”这样的术语进行狡辩是不合理的。如果您愿意,可以将所有内容称为“存根”。关键是,两者都是PROXIES,都是MARSHALLING,一端存在于客户端下(客户端调用),另一端存在于服务器上(骨架调用实际的服务器代码)。
希望我的解释和示例有助于您another link帮助(至少一点点)。
答案 4 :(得分:0)
远程对象的存根充当客户端的远程对象的本地代表或代理。存根隐藏参数的序列化和网络级通信,以便向调用者提供简单的调用机制。
或者,考虑在一台机器上运行的程序:每个方法都是一个分支。将方法移动到远程计算机时,切断分支,留下仅包含通信的存根 Source
在远程JVM中,每个远程对象可能具有相应的骨架。骨架负责将调用分派给实际的远程对象实现。
我认为骨架是第一个实现 - 满足调用约定的东西,执行部分操作,并且令人满意地完成。
表格Oracle
答案 5 :(得分:0)
存根: 存根是一个小的程序例程,可以代替较长的程序,该程序可能稍后加载或位于远程。
骨骼 远程对象的框架是服务器端实体,该实体将调用分派到实际的远程对象实现。
答案 6 :(得分:-1)
我只会解决为什么存根需要在服务器端以及客户端的问题。另一个问题已经得到解答。
当导出的远程对象作为方法参数或返回值传递给远程对象时,会发生以下情况。在服务器计算机上创建存根。然后将其序列化,通过网络发送到客户端计算机,并在那里反序列化以生成存根的相同副本。之后,客户端计算机上不再需要存根。
这是一个典型的场景。
因此,在服务器端使用存根的一个用途是它可以被序列化并且(它的副本)发送到其他机器,例如作为绑定的一部分。以类似的方式,当客户端进行查找时,注册表会序列化其副本(ss1)并将其发送给客户端。