编辑:我原来的标题是“在RPC中使用存根”;我编辑标题只是为了让其他人知道这不仅仅是那个问题。
我已经开始开发一些基于SOAP的服务,但我无法理解存根的作用。引用Wiki:
客户端和服务器使用不同的地址空间,因此必须执行函数调用中使用的参数转换,否则无法使用这些参数的值,因为指向计算机内存的指针指向每个参数上的不同数据机。即使对于简单参数,客户端和服务器也可以使用不同的数据表示(例如,对于整数,使用big-endian与little-endian。)存根用于执行参数的转换,因此远程函数调用看起来像本地函数调用用于远程计算机。
这是愚蠢的,但我实际上并不理解这一点。我已经用Java完成了一些套接字编程,但是当我的TCP / UDP客户端与我的服务器交互时,我不记得“转换参数”的任何步骤。 (我假设使用TCP / UDP套接字的原始服务器 - 客户端通信确实属于RPC)
我在RESTful服务开发方面有一些经验,但我也无法识别使用REST的Stub模拟。有人可以帮助我吗?
答案 0 :(得分:1)
通过网络进行调用的存根(无论是SOAP,REST,CORBA,DCOM,JSON-RPC还是其他)都只是辅助类,它们为您提供了一个包装函数,可以处理所有底层细节,例如: / p>
没有“原始”TCP通信这样的东西。如果您在请求/响应模型中使用它并从TCP连接发送的数据中推断出任何类型的含义,那么您已经在其中编码了某种形式的“参数”。你碰巧自己建立了通常会提供的存根。
Stubs尝试让您的远程调用看起来就像本地进程内调用,但老实说这是一件非常糟糕的事情。它们完全不一样,应用程序应该对它们有不同的看法。