rpc(Remote process call 即远程过程调用)是一种请求-相应的协议, 主要使用于C/S架构中,使得分布式系统成为可能。由客户端发起请求,服务端调用各种参数处理请求,当服务器在处理请求时,客户端处于阻塞状态,除非发起一个异步请求。
rpc的理论开始于1970年代,而具体的实现要开始于1980年代早期,随着面向对象编程的兴起,RMI广泛地被实现,尤其是CORBA和Java RMI。而2000年后,RMI们也随着互联网的兴起而逐渐衰落。
rpc的劣势在于由于网络的不稳定性,远程调用可能出错。客户端需要处理许多可能的错误。rpc也不是一个标准,仅仅是一个idea。
我使用的语言主要是Java,在Java中,RPC是基于面向对象技术的。Java也有RMI,因为使用面向对象语言,所以是面向对象的,可以把对象发送到网络中。关于rpc和rmi的区别可以看这篇 http://stackoverflow.com/questions/2728495/what-is-the-difference-between-java-rmi-and-rpc
而详细的介绍在这边 https://www.cs.rutgers.edu/~pxk/416/notes/15-rpc.html
RPC的过程:
- 客户端调用stub,通常是调用本地方法,把参数放入stub中
- stub把参数打包进一个信息,并发起一个call来发送信息,打包参数的过程叫做marshalling
- 客户端本地的操作系统 通过system call 把信息发送到服务器
- 服务器本地的操作系统把数据包发送至服务器stub
- 服务器stub解包
- 服务器调用过程,而返回值以相反的路径传回客户端
而RESTful风格是一种替代。