Socket和RPC(远程过程调用)之间的实际区别是什么?
根据我的理解,两人的工作都基于Client–server model。还应该在哪些条件下使用哪一个?
时出现混乱答案 0 :(得分:8)
简短回答:
RPC是协议。套接字提供对传输的访问以实现该协议。
RPC是操作系统提供的服务和协议,允许触发代码以供远程应用程序运行。它具有定义的协议,通过该协议,其他设备可以通过网络访问过程或对象。 RPC的实现基本上可以在任何网络传输上完成(例如TCP,UDP,带字符串的杯子)。
套接字只是一种编程抽象,使得应用程序可以通过特定的网络传输与另一个设备发送和接收数据。您使用套接字在传输(例如TCP)之上实现协议(例如RPC)。
答案 1 :(得分:4)
这是特定于操作系统的。因此,首先阅读一本好的操作系统书籍,如Operating Systems: Three Easy Pieces(可免费下载)。
Network sockets是一种进行进程间通信的方法(特别是在不同的机器之间)。另请阅读Berkeley sockets API,例如: Linux上的socket(7)。
Remote procedure calls是一种编程技术(通常在Linux上使用socket(2)系统调用)。每个RPC请求都需要一个回复,并且是软件启动的。
套接字通常也用于异步消息(例如,X11协议stack,WebSocket s,SMTP)。 Message passing是一种编程范例(比RPC更通用),它们经常被发送而不期待任何回复。例如,X11服务器将为每次按键等发送键盘事件消息
(所以在某些方面,你要比较苹果和橘子)
如果在Linux上,我建议阅读Advanced Linux Programming(可免费下载)。
答案 2 :(得分:1)
PS:Galvin阅读操作系统概念时出现混乱
那就是你的问题。
远程过程调用(RPC)是用于网络通信的高级模型。存在许多RPC协议。在RPC模型中,底层实现为每个远程过程创建一个存根。当您的应用程序调用“远程过程”时,存根打包参数,通过下一个工作发送它们,调用,过程的远程版本,获取返回值并通过网络将它们发送回调用者,存根解包返回值和您的应用程序然后接收它们。
RPC模型在20世纪80年代后期成为时尚。我们的想法是,在您的功能实际执行的过程中(在您的过程中,在另一个过程中,在另一台计算机上),它将是透明的。这个概念在1990年代早期扩展到分布式对象(例如,DCOM,CORBA)。
不幸的是,在现实世界中,应用程序确实需要知道一个过程是否由于延迟和错误处理而远程执行。
RPC实现中的某个地方会调用网络接口。
套接字就是这样的网络接口。它们不是唯一的编程接口,但它们是Eunuchs系统中最常见的。
因此,可以使用套接字实现RPC MIGHT 。