前言
RPC(Remote Procedure Call)远程过程调用,是一种通信模式,与本地调用相区分,一块代码要调用另一个服务器上的接口,对于java而言,要调用另一个服务器上的资源,可以使用socket通信或者Http/Https访问,因此对于RPC来说,其实现需求之一就是,必须要选择一种通信协议。
因为java远程调用传输调用信息因此,其实现需求之二就是实现信息的序列化。其发展可如下所示:
RPC流程优化
- 原始socket通信需要了解client与server的详细细节(数据类型、格式),client和server端的IO流都要自己手动处理,业务变更牵一发而动全身。
- client与server中间添加stub代理,将第一步client的输入输出流处理过程交给stub处理从,client只调用stub的getStub方法获取某个接口,然后调用该接口的方法,方便了client的使用。
- 第二步的stub的接口方法使用动态代理,提高代理能力。
- 第三步动态代理优化为传递方法名、方法参数类型数组、方法参数数组的通用方法,但返回值仍是固定的。
- 优化第四步的返回值为一个Object对象。
- 将Stub的getStub方法添加一个接口类参数,传递接口类名字、方法名、方法参数类型数组、方法参数数组,从固定接口的某个方法调用上升到某个接口的某个方法调用
。。。待续