RPC 是远程过程调用 (Remote Procedure Call),即远程调用其他虚拟机中运行的 java
object。 RPC 是一种客户端/服务器模式, 那么在使用时包括服务端代码和客户端代码, 还有
我们调用的远程过程对象。
RPC调用机制,如下图
PRC cline 和 service 端必须实现同一接口!
、、、、、、运行机制、***、、、、
1、先获取 interface 接口 和 service 代理对象。
2、通过代理对象调用该代理类的业务方法,并调用socket的发送请求的方法。
3、服务端接收请求,并反射出请求中的动态代理类。
4、同时生成socket和该类的动态代理,并实现该类的逻辑。
5、通过socket相应该类运行结果给客户端
6、客户端通过接收service端的请求,获取运行结果。
RPC Cline端
java代码:
public interface MyRpc {
//版本信息
public static final long versionID = 1L;
//业务方法
public String loginServer(String name , String password);
}
client 端通过RPC.getProxy获取本地代理
public class Test {
public static void main(String[] args) throws Exception {
//获取MyRpc
MyRpc proxy = RPC.getProxy(MyRpc.class, 1L, new InetSocketAddress("10.30.95.166", 10000), new Configuration());
System.out.println(proxy.loginServer("常先生", "213123"));
}
}
service端
MyRpcImpl 实现了MyRpc,并通过RPC.Builder获取Builder
public class MyRpcImpl implements MyRpc {
@Override
public String loginServer(String name, String password) {
return "欢迎"+name+"登陆";
}
}
public class Test {
public static void main(String[] args) throws Exception {
Builder builder = new RPC.Builder(new Configuration());
builder.setBindAddress("10.30.95.166").setPort(10000).setProtocol(MyRpc.class).setInstance(new MyRpcImpl());
Server build = builder.build();
build.start();
}
}
运行结果: