Socket和RPC有什么区别?

roo*_*ler 16 sockets rpc operating-system ipc

Socket和RPC(远程过程调用)之间的实际区别是什么?

根据我的理解,两者的工作都基于客户端 - 服务器模型.还应该在哪些条件下使用哪一个?

PS:Galvin在阅读操作系统概念时出现了混乱

sel*_*bie 13

简短回答:

RPC是协议.套接字提供对传输的访问以实现该协议.

RPC是操作系统提供的服务和协议,允许触发代码以便由远程应用程序运行.它具有定义的协议,通过该协议,其他设备可以通过网络访问过程或对象.RPC的实现可以基本上在任何网络传输上完成(例如TCP,UDP,带字符串的杯子).

套接字只是一种编程抽象,使得应用程序可以通过特定的网络传输与另一个设备发送和接收数据.您使用套接字在传输(例如TCP)之上实现协议(例如RPC).

  • `socket` 不是一种传输。它是一个有助于访问传输的编程 API。您可以在您想要的任何其他传输和编程 API 之上实现 RPC,前提是双方都使用该传输(对于 RPC)。带绳子的杯子或鸟类的鸽子也可以,但你必须教鸽子打字。这可能需要一段时间。 (2认同)

Bas*_*tch 6

它是特定于操作系统的。因此,请先阅读一本不错的操作系统书籍,例如《操作系统:三个简单的部分》(可免费下载)。

网络套接字是进行某些进程间通信(尤其是在不同机器之间)的一种方式。另请阅读有关Berkeley套接字 API的信息,例如Linux上的socket(7)

远程过程调用是一种编程技术(通常在Linux上使用socket(2)系统调用)。每个RPC请求都期望有一个答复,并且是由软件启动的。

套接字通常还用​​于异步消息(例如,X11协议WebSocketSMTP)。消息传递是一种编程范例(比RPC更通用),它们经常发送而不会收到任何答复。例如,X11服务器将为每次按键等发送键盘事件消息。

(因此,在某些方面,您正在比较苹果和橙子)

如果在Linux上,建议阅读“ 高级Linux编程”(可免费下载)。


use*_*003 5

PS:阅读 Galvin 的操作系统概念时会出现混淆

那就是你的问题。

远程过程调用 (RPC) 是网络通信的高级模型。存在许多 RPC 协议。在 RPC 模型中,您的底层实现为每个远程过程创建一个存根。当您的应用程序调用“远程过程”时,存根打包参数,通过网络发送它们,调用过程的远程版本,获取返回值并通过网络将它们发送回调用者,存根解压缩返回值,然后您的应用程序接收它们。

RPC 模型在 1980 年代后期流行起来。这个想法是让你的函数实际执行的地方(在你的进程中,在另一个进程中,在另一台计算机上)是透明的。这个概念在 1990 年代初期扩展到分布式对象(例如,DCOM、CORBA)。

不幸的是,在现实世界中,应用程序确实需要知道某个过程是否由于延迟和错误处理而远程执行。

在 RPC 实现的某个地方调用了网络接口。

套接字就是这样一种网络接口。它们不是唯一的编程接口,但它们是 Unix 系统上最常见的。

因此,一个RPC MIGHT使用套接字来实现。