远程过程调用和Web服务有什么区别?

88
是否有对RPC和Web服务的清晰定义?快速搜索维基百科得到以下结果:

RPC: 远程过程调用(RPC)是一种进程间通信技术,它允许计算机程序在另一个地址空间(通常在共享网络上的另一台计算机上)执行子例程或过程,而无需程序员明确编写此远程交互的详细信息。

Web服务: Web服务通常是应用程序编程接口(API)或Web API,通过超文本传输协议访问并在托管请求服务的远程系统上执行。Web服务倾向于分为两类:大型Web服务[1]和RESTful Web服务。

我不太清楚这两者之间的真正区别。似乎其中一件事物可能属于RPC,并且同时也是一种Web服务。
Web服务是否是RPC的更高级表示形式?
4个回答

67

Web服务是RPC的更高级表现形式吗?

是的,它是。 Web服务是RPC的特定实现。在其最基本的层面上,Web服务连接到套接字,使用HTTP协议来协商发送在远程空间(可以是同一台计算机)中执行的有效负载。所有这些远程调用抽象,在其核心上,都是RPC。


1
除了Wayne所写的内容之外,Web服务的其他属性还包括:允许通过RPC实现平台无关性,并且可被发现和自我描述(与Win32 RPC相比)。 - Alex
8
不,那不是正确的。RPC是Web服务的一种架构风格。另一种选择是REST。参考:http://ieeexplore.ieee.org/lpdocs/epic03/wrapper.htm?arnumber=5339611 - schlamar
@schlamar Web服务是否与RPC有关?如果是,我们在Web服务环境中是否有客户端和服务器存根? - overexchange

9

我看到了这个问题。这个问题很久以前就被提出了,但我认为在这个社区里任何人对这个话题给予更多信息和清晰度的回答,都会对未来的提问者有所帮助。因此,我想补充我的观点,指出关键的差异,并希望它对未来的读者有所帮助。

------------------------------------------------------------------------------
| Category             |    RPC              |    Web Services
------------------------------------------------------------------------------
|Operation's Location  | On top of TCP       | on top of HTTP
------------------------------------------------------------------------------
|Data format           | Binary              | Text, XML, JSON, ect.
------------------------------------------------------------------------------
|Speed                 | Slow (Marshalling)  | Fast
------------------------------------------------------------------------------

我没有提到RPC和Web服务的描述,因为你可以在其他人的答案中清楚地看到它们。


1
这不准确。RPC具有接口定义语言作为数据格式,XML和JSON在传输过程中也是二进制的。没有区别。编组只是解码,没有任何花哨的东西。HTTP是建立在TCP之上的吗? - zeejan
1
为什么它是二进制的,但速度很慢? - testing_22
不清楚为什么会有这样的差异,如果主要答案说没有任何差异,那么为什么会出现这种情况?有人能否评论一下这是否错误? - questionto42
@questionto42 你说的“这样的差异”是指什么?你在谈论哪种差异? - Doston
就像上面的第一条评论。您展示了一个明显存在差异的表格,尽管主要答案说Web服务只是RPC的一种实现,RPC位于其核心位置(或者某个评论说它也可以是REST)。既然涉及到Web服务"核心"的RPC,您的表格可能仍有意义,但那么高层抽象(Web服务)快而RPC慢对我来说似乎有些奇怪。如果没有任何了解,我担心这个回答中存在一些问题,或者读者可能会误解它。 - questionto42

5
远程过程调用(RPC)和 WebService 在功能上都是并行的。但在它们调用的方式上有微妙的差别。Web 服务可以通过任何应用程序调用,使用 XML 格式通过 HTTP 协议进行处理,其具有互操作性;而在 RPC 的情况下,函数可以被多个应用程序调用,因此需要采用序列化路径来存储对象数据,支持 TCP 协议的二进制格式。更好的方法是我们可以简要介绍一下 RPC 工作流程,就像通过正确的 Socket 和消息格式执行函数,但不知道客户端服务器中特定函数的实际存在。即使提供的套接字可能不在函数所在的同一台服务器上,但每次都会感觉这个函数位于本地。在远程服务中,函数驻留在远程机器上,并且可以通过适当的格式和协议调用,它允许可扩展性。

请提供更好的英文语句。目前无法理解。 - Mohit Shah

1
• 使用XML格式化数据进行传输,改善或消除了开发人员通常编码的编组、解组和其他翻译相关要求。 • 使用已发布的明确定义标准的标准协议(如HTTP或SMTP)传递数据。 • 底层暴露的服务使用已知的被接受机制WSDL进行明确定义。 • 使用明确定义的标准UDDI和更高级的ebXML查找服务。
具体来说,WSDL提供了以下关键信息:
• 使用其和元素以及适当的模式定义,定义在两个端点之间传递的消息的格式。 • 服务的语义:如何调用它以进行同步请求/响应、同步仅回复或异步通信。 • 通过元素提供服务的终点和传输方式:即谁提供服务。 • 通过元素进行编码,即访问服务的方式。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接