视频参考b站视频马士兵RPC演进
RPC
概念
单机到分布式 -> 分布式通信 -> 最基本:二进制数据传输TCP/IP
第一阶段
使用的是java基础中的socket编程
设置监听端口,通过IO流将数据写进去读出来
第二阶段
网络传输的编程过于繁琐,便将网络传输的过程封装了起来。
Stub(客户端)类,代理,将网络编程相关部分封装成一个类,client中只需引入Stub,调用Stub中的方法即可
第三阶段
Stub开始提供IUserService,在client中能得到UserService对象,然后可以远程访问FindUserById方法,
基于动态代理,用invoke方法联网实现
第四阶段
基于第三阶段,将invoke中的方法名,参数类型等传给server,server通过方法名和参数类型匹配到所要调用的方法。
服务器:读入方法名,参数类型,参数;通过反射找到方法并用invoke调用。
第五阶段
在Server处使用WriteObject方法把对象写入
相当于用object类型封装以支持任意对象返回
第六阶段
将Stub的返回值改为Object,可以返回任意类型的对象。
第七阶段
使用了序列化框架Hessian,相比于实现serializable接口实现序列化,Hessian的压缩后体积更小,进行序列化和反序列化的时间更短了。
动态代理
对象身上的业务太复杂,可以通过代理转移部分职责。
类
代理实现
star接口中有着BigStar类中的所有方法,proxy通过反射回得到接口中的方法。