hadoop源码研读之路(六)----RPC的Client端和Server端

本文详细探讨了Hadoop RPC机制,包括RPC Client如何发起RPC调用,建立并维护到RPC Server的连接,以及RPC Server如何接收和处理调用请求。在Client端,每个Call通过反射转化为调用,利用连接池发送序列化参数,并等待响应。而在Server端,Listener接收连接请求,将数据封装为Call放入队列,Handler异步非阻塞地处理Call并返回响应。
摘要由CSDN通过智能技术生成

既然是RPC,就一定有Client端和Server端,

如果进行一次HDFS的读写,其中一个DataNode需要跟NameNode建立连接,也需要和其他的DataNode建立连接,那么每一个Client需要维护多个连接。同时为了减少不必要的连接,Client的做法是拿Connectionid来作为Connection的ID。


RPC Client的结构

Client.ConnectionId:到RPC Server对象连接的标识(IP地址+端口号或者主机名+端口号)

Client.Call:Call调用的信息。

Client.ParallelResults:Call响应

RPC.Invoker:对InvocationHandler的实现,提供inovke方法,实现RPC.Client对RPC.Server对象的调用。

RPC.Invocation:用来序列化和反序列化RPC.Client的调用信息(主要跟前面讲的动态代理和Java反射机制有关)


RPC Client主要流程

每一个Call都是由RPC.Client发起的

1.RPC Client 发起RPC Call.通过Java反射机制转化为对Client.call调用

2.调用getConnection得到与RPC Server的连接,每一个RPC Client 都维护一个HashMap结构的到RPC Server的连接池

3.通过Connection将序列化后的参数发送到RPC服务器端

4.阻塞方式等待RPC服务端返回响应


在IPC下面,Server类是个抽象类,唯一抽象的地方是:


                
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值