【发布时间】:2018-02-18 02:17:38
【问题描述】:
Socket 和 RPC(远程过程调用)的实际区别是什么?
据我了解,两者的工作都基于Client–server model。还有哪个应该在什么条件下使用?
PS:阅读Operating System Concepts by Galvin 时会出现困惑
【问题讨论】:
标签: sockets operating-system ipc rpc
Socket 和 RPC(远程过程调用)的实际区别是什么?
据我了解,两者的工作都基于Client–server model。还有哪个应该在什么条件下使用?
PS:阅读Operating System Concepts by Galvin 时会出现困惑
【问题讨论】:
标签: sockets operating-system ipc rpc
它是特定于操作系统的。因此,请先阅读一本好的操作系统书籍,例如 Operating Systems: Three Easy Pieces(可免费下载)。
Network sockets 是一种进行进程间通信(特别是在不同机器之间)的方式。另请阅读Berkeley sockets API,例如socket(7) 在 Linux 上。
Remote procedure calls 是一种编程技术(通常在 Linux 上使用socket(2) 系统调用)。每个 RPC 请求都需要恰好一个回复,并且是软件启动的。
套接字通常也用于异步消息(例如,X11 协议stack、WebSockets、SMTP)。 Message passing 是一种编程范式(比 RPC 更通用),它们经常被发送而不期待任何回复。例如,X11 服务器会为每次按键发送一个键盘事件消息,等等。
(所以在某些方面,你是在比较苹果和橘子)
如果在 Linux 上,我建议阅读 Advanced Linux Programming(可免费下载),并阅读有关 syscalls(2) 的更多信息(尤其是 poll(2) 用于多路复用)
【讨论】:
简答:
RPC 是协议。套接字提供对传输的访问以实现该协议。
RPC 是操作系统提供的服务和协议,允许远程应用程序触发代码运行。它具有定义的协议,通过该协议,其他设备可以通过网络访问过程或对象。 RPC 的实现基本上可以通过任何网络传输(例如 TCP、UDP、带有字符串的杯子)来完成。
套接字只是一种编程抽象,因此应用程序可以通过特定的网络传输与另一个设备发送和接收数据。您在带有套接字的传输(例如 TCP)之上实现协议(例如 RPC)。
【讨论】:
socket 不是传输。它是一种便于访问传输的编程 API。您可以在您想要的任何其他传输和编程 API 之上实现 RPC,前提是双方都使用该传输(用于 RPC)。带弦的杯子或鸽子也可以,但你必须教鸽子打字。这可能需要一段时间。
PS:阅读 Galvin 的操作系统概念时会出现困惑
那是你的问题。
远程过程调用 (RPC) 是网络通信的高级模型。存在许多 RPC 协议。在 RPC 模型中,您的底层实现为每个远程过程创建一个存根。当您的应用程序调用“远程过程”时,存根打包参数,通过网络发送它们,调用远程版本的过程,获取返回值并通过网络将它们发送回调用者,存根解包返回值,然后您的应用程序接收它们。
RPC 模型在 1980 年代后期开始流行。这个想法是它会在你的函数实际执行的地方是透明的(在你的进程中,在另一个进程中,在另一台计算机上)。这个概念在 1990 年代初扩展到分布式对象(例如 DCOM、CORBA)。
不幸的是,在现实世界中,由于延迟和错误处理,应用程序确实需要知道某个过程是否正在远程执行。
在 RPC 实现中的某个地方调用了网络接口。
套接字就是这样的网络接口。它们不是唯一的编程接口,但它们是 Unix 系统上最常见的。
因此,RPC 可能使用套接字来实现。
【讨论】: