1. Connection
IPC连接(Connection)是IPC客户端和服务器关系的一个抽象,一个IPC客户端在
调用服务器上的方法前,需要和服务器建立一个连接。由于客户端对连接的抽象与服务器
端对连接的抽象不太一样,连接必须区分为客户端连接类Client.Connection和服务器连接
类Server.Connection,它们各自提供了客户端和服务器管理连接需要的相关信息和方法。
Hadoop的远程过程调用使用TCP协议进行通信,IPC连接建立在TCP连接之上。
2. Call
在客户端和服务器建立连接以后,客户端就可以对外提供远程过程调用服务了,远程
过程调用是对IPC接口上方法的调用,它在Hadoop源代码中的抽象就是远程调用Call.和
Connection类似,客户端和服务器分别定义了各自的内部远程调用类,分别是Client.Call和
Server.Call.通过对Call的抽象,客户端对远程服务器的过程调用,就可以通过IPC客户端
和服务器间的连接,发送到服务器,处理后再返回到客户端。
3. Server 处理
Server处理器指的是监听器(Listener)、处理器(Handler)和应答器(Responder),三
者配合在IPC服务器上完成客户端的远程调用的处理.
- 其中,Listener监听客户端发来的连接请求和连接建立后的数据请求,并调用服务器端
连接对象上的相关方法。连接对象的主要工作是接收来自客户端的远程调用请求帧,反序列
化以后,这些调用请求会放入一个阻塞队列中,由Handler处理. - Handler根据远程调用Call中的上下文,调用对应的IPC接口实现类,完成服务春端的
过程调用,调用结果经过序列化后,在连接的应答队列为空时,返回给客户端. - 当客户端比较忙时(这时应答队列不为空),Handler将调用结果放入响应队列,并由
Responder通过IPC连接发送回客户端。也就是说,Handler和Responder都可以发送调用结果.