首先:我们先来了解RPC协议具体的内容
(1):是远程方法的调用。一台计算机可以访问到另一台计算机的程序,但是我们却不需要去关注底层内容的实现
(2):hadoop之间进程的交互使用的都是RPC,比如NameNode和DataNode,JobTracker和TaskTracker之间的通信
2:RPC所用到的知识点
(1),动态代理
(2),反射
(3),序列化
(4),非阻塞IO(NIO)
3,RPC机制
(1):序列化层:Client与Server端通信传递的信息采用了Hadoop里提供的序列化或自定义的Writable类型
(2)函数调用层:Hadoop RPC通过动态代理以及java反射实现函数的调用
(3)网络传输层:Hadoop RPC采用了基于TCP/IP的socket机制
(4)服务器端框架层:RPC Server利用java NIO以及采用了事件驱动的I/O模型,提高RPC Server的并发处理能力
在学的时候,在想,为什么要使用动态代理
我的想法是,因为我们要实现远程的链接,但是,我们又不需要将他所有的底层东西知道,我们只需要调用自己想要的就行,而动态代理加反射就是一个很好的方法
根据RPC的机制,我们知道我们需要实现的有四点,按照我的想法来说
从客户端传递信息到服务器端所需要经过的具体过程为(通过一个案列说明):
一:序列化的过程
(1):因为我们在传送数据的时候,需要通过序列化的过程,所以你,首先我们需要对我们要传输的数据进行封装(Data[method,param,result]);
(2):客户端对数据的序列化处理:(RequestHandler:处理客户端对数据的序列化和反序列化处理)
(3):服务器端对建立新的线程对传入数据的处理(ProcessThread:服务器端建立新的线程处理数据)
二:函数调用层:
(1):使用反射技术,运行客户端请求的方法(NameNodeHandler)
(2): 使用java动态代理技术,创建通信协议的虚拟实现类(使用内部类直接写入到RPC协议中客户端调用的方法中)
三:网络传输层:
(1):协议接口(NameNode):实现接口(NameNodeImpl)
(2):使用RPC通信,根据IP,port,实现类为(RPC)
四:服务器端框架层:
这个主要用到的还是在序列化的时候,因为在序列化的额时候,我们需要对数据进行处理。
之后,便是测试
具体代码在下面上传