Socket网络通信
代理
RPC中 InvocationHandler
接口需要实现invoke()方法,来指明代理对象的方法被调用时的动作。在这里,我们显然就需要生成一个RpcRequest对象,发送出去,然后把从服务端返回的结果return即可。
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
//客户端向服务端传输的对象,Builder模式生成
RpcRequest rpcRequest = RpcRequest.builder()
.interfaceName(method.getDeclaringClass().getName())
.methodName(method.getName())
.parameters(args)
.paramTypes(method.getParameterTypes())
.build();
//进行远程调用的客户端
RpcClient rpcClient = new RpcClient();
return ((RpcResponse)rpcClient.sendRequest(rpcRequest, host, port)).getData();
}
在服务端,我们已经实现了HelloService的实现类HelloServiceImpl,因此只需要创建一个RpcServer把这个实现类注册进去,启动服务端,监听请求进行处理即可。
客户端方面,我们需要通过动态代理生成代理对象,并且调用接口方法,动态代理就会自动帮我们向服务端发送请求,返回结果的