一、RPC简介
RPC(Remote Procedure Call)——远程过程调用,它是一种通过网络从远程计算机程序上请求服务。RPC是与语言无关的。可用于:高并发程序,将程序各层分离以提高程序的负载;公共模块,为其他模块提供服务等。
1. 调用客户端句柄,执行传送参数
2. 调用本地系统内核发送网络消息
3. 消息传送到远程主机
4. 服务器句柄得到消息并取得参数
5. 执行远程过程
6. 执行的过程将结果返回服务器句柄
7. 服务器句柄返回结果,调用远程系统内核
8. 消息传回本地主机
9. 客户句柄由内核接收消息
10. 客户接收句柄返回的数据
如图所示,假设客户端1程序里在调用sayHello()方法,对于客户端1而言调用sayHello()方法就像调用本地方法一样。但从上图可以看出实际上客户端1调用的是服务器中的sayHello()方法,RPC屏蔽了底层的实现细节,让调用者无需关注网络通信、数据传输等细节。
二、RPC框架的实现
1. 技术简介
RPC的核心就是能够让本地应用简单、高效地调用远程服务。一般从以下几方面考虑:
(1) 远程服务代理:本地调用的方法(服务)实质是远程方法的本地代理,因此会需要一个远程服务代理对象。在Java中,远程服务代理对象可以使用JDK动态代理实现。
(2) 通信模型:客户端与服务器之间的通信方式。Java中一般基于BIO或NIO。
(3) 服务定位:通过