Job类中实现了InvocationHandler 接口的是 Invoker, 这种语法是java语言对代理模式的一种支持,最终对对象的调用都会成为对代理
的调用。下面看看真正的处理代理的代码Invoker。
其中factory的默认是
<property> <name>hadoop.rpc.socket.factory.class.default</name> <value>org.apache.hadoop.net.SocksSocketFactory</value> </property>
client是调用ClientCach类的getClient方法得到,这个类是对Client的一个缓存。之后调用client.call(...)来远程调用改方法,
其中最重要的参数是实现了Writable接口的类Invocation的一个实例,client.call(...)方法如下所示
Connection是一个线程,用来进行socket连接和send(call)的,这里可以看到大师写的代码是严谨的,值得学习。在call.wait之后,
调用interrupt将线程中止。
sendParams会调用NetUtils类的connect方法去连接socket的输出流,建立的tcp连接是禁止Nagle算法的,也就是NO_DELAY,方法是