java ipc实例,仿照hadoop ipc写的实例
1.用接口规定ipc协议的方法
2.client端用动态代理作调用远程ipc接口方法
3.server端用反射,执行ipc接口方法,并返回给client端接口方法返回值
hadoop ipc的另一个特点是server端用三个角色,Listener,Handler,Responser。server聚合这三个角色
Listener:nio socket获取请求CALL对象,放入队列中
Handler:从队列中获取CALL对象,执行ipc接口方法
Responser:被Handler调用,用nio socket返回接口方法返回值
简单实例:(实例来自github)
1.定义协议
public interface Echo {
public String who() throws IOException;;
public void from(String name) throws IOException;;
}
2.定义代理
/*Invocation封装方法名和参数*/
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
final boolean logDebug = LOG.isDebugEnabled();
long startTime = 0;
if (logDebug) {
startTime = System.currentTimeMillis();
}
//调用Client call方法
Invocation value = client.call(new Invocation(iface, method, args),
remoteId);//调用远程的当前方法,阻塞直到server返回值
if (logDebug) {
long callTime = System.currentTimeMillis() - startTime;
LOG.debug("Call: " + method.getName() + "() " + callTime);
}
return value.getResult();
}