歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Hadoop源碼分析之RPC(Remote Procedure Call Protocol)

Hadoop源碼分析之RPC(Remote Procedure Call Protocol)

日期:2017/3/1 10:03:25   编辑:Linux編程

理解這個RPC是不是的先去理解哈動態代理 好多invoke,還有Socket網絡編程

先來張eclipse下IPC源碼圖:


先來看看RPC.java,既然是動態代理,自然會想到Invoke()方法了,先來看看RPC中的Invoker中的invoke()方法

private static class Invoker implements InvocationHandler {
private InetSocketAddress address;
private UserGroupInformation ticket;
private Client client;
private boolean isClosed = false;

public Invoker(InetSocketAddress address, UserGroupInformation ticket,
Configuration conf, SocketFactory factory) {
this.address = address;
this.ticket = ticket;
this.client = CLIENTS.getClient(conf, factory);
}

public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
final boolean logDebug = LOG.isDebugEnabled();
long startTime = 0;
if (logDebug) {
startTime = System.currentTimeMillis();
}

ObjectWritable value = (ObjectWritable)
client.call(new Invocation(method, args), address,
method.getDeclaringClass(), ticket);
if (logDebug) {
long callTime = System.currentTimeMillis() - startTime;
LOG.debug("Call: " + method.getName() + " " + callTime);
}
return value.get();
}

/* close the IPC client that's responsible for this invoker's RPCs */
synchronized private void close() {
if (!isClosed) {
isClosed = true;
CLIENTS.stopClient(client);
}
}
}

可以看出動態代理裡的invoke()方法其實是RPC裡的invocation對方法名,參數做了封裝,可以看invocation類的

Copyright © Linux教程網 All Rights Reserved