首先开头注释说协议是一个java接口,所有的接口都必须返回8种基本类型、String,Writable种的一种。

那么下面果然给出了一个RpcInvoker里面有一个空方法

 public Writable call(Server server, String protocol,

        Writable rpcRequest, long receiveTime) throws Exception ;

返回的就是Writable的对象,而call内的参数也很容易理解,调用的服务器,协议,请求,收到返回的时长。

下面的大块代码是一个Builder内部类,这个类的作用是构造一个RPC 服务器,无非是ip,端口号etc。

下面是构建了一个抽象的Server类,继承了org.apache.hadoop.ipc.Server ,我们前面的文章有介绍 http://li5jun.com/article/348.html

这个抽象类只有

  public abstract Writable call(RPC.RpcKind rpcKind, String protocol,

      Writable param, long receiveTime) throws Exception;

  

这一个函数没有实现,所以我们完全可以继承这个server用来直接明了的实现了自己的函数。

new RPC.Builder(new Configuration()).setProtocol(IServer.class)

                .setInstance(server).setBindAddress(InetAddress.getLocalHost().getHostAddress()).setPort(rpcServerPort)

                .setNumHandlers(slaveNum * 2).build();

这样也可以直接构造一个,协议protocol就是自己写的一个接口。里面歇一歇空的方法名即可,然后再具体实现在一个server里,setInstance就是这样一个实例。一个实现了IServer接口的实例。需要构造一个server基本要设定如下一些选项:

                return RPC.getProtocolEngine(this.protocol, this.conf).getServer(this.protocol, this.instance, this.bindAddress, this.port, this.numHandlers, this.numReaders, this.queueSizePerHandler, this.verbose, this.conf, this.secretManager, this.portRangeConfig);

协议,实例,绑定地址,处理handler数目等