首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 服务器 > Apache >

Hadoop异步rpc通讯机制-org.apache.hadoop.ipc.Server

2013-02-28 
Hadoop异步rpc通信机制--org.apache.hadoop.ipc.ServerJava NOI非阻塞技术不是开启线程去等待端口的响应,

Hadoop异步rpc通信机制--org.apache.hadoop.ipc.Server
Java NOI非阻塞技术不是开启线程去等待端口的响应,而是采用Reactor模式或Observer模式监听I/O端口,当端口有响应时,会自动通知我们,从而实现流畅的I/O读写。

Java NOI中selector可视为一个观察者,只要我们把要观察的SocketChannel告诉Selector(注册的方式),我们就可以做其余的事情,等到已告知Channel上有事情发生时,Selector会通知我们,传回一组SelectionKey,我们读取这些Key,就可以获得Channel上的数据了。

Client端的底层通信直接采用了阻塞式IO编程,Server是采用Java NIO机制进行RPC通信:

java NIO参考资料:

http://www.iteye.com/topic/834447

http://weixiaolu.iteye.com/blog/1479656

=========================================================================================================================

Server是一个abstract类,抽象之处在call方法中,RPC.Server是ipc.Server的实现类,RPC.Server的构造函数调用了ipc.Server类的构造函数的,Namenode在初始化时调用RPC.getServer方法初始化了RPC.Server:

public synchronized void start() throws IOException {    responder.start();    listener.start();    handlers = new Handler[handlerCount];        for (int i = 0; i < handlerCount; i++) {//可以有多个处理线程      handlers[i] = new Handler(i);      handlers[i].start();    }  }
stop()操作类似,不再赘述。

=========================================================================================================================

【总结】

Server采用Java NIO非阻塞技术。
Listener用于接收客户端的连接,把连接加入到connectionList内,同时调用Connection的方法进行版本校验、建立Call并将Call加入到callQueue中。

Handler是处理线程,用于从callQueue中取出请求进行处理,调用Respond.doRespond将call加入到responseQueue。

Respond是响应线程,用于将responseQueue上的响应写给对应的Client,同时doPurge清理掉长期不响应的连接。

热点排行