1.概念
我们知道RPC的目的就是让Client像本地方法一样去调用远程(即Server)服务,而完成这一功能,从上至下,Server需要完成方法的包装序列化,以及负责实现网络通信和方法的具体实现;同样Client调用,首先也得持有方法对象,然后将方法以及参数序列化后,和Server通信,交由Server具体实现,最后Server返回响应的结果。
总结一下,RPC框架需要解决的问题:1. 网络通信 2. 序列化/反序列化 3. 透明化服务调用。下面一一分析。
2.透明化服务调用
这也是RPC最直接的目的,Client需要像调用本地方法一样调用Server端的方法,所以在Client和Server端中间必须有一个虚拟桥梁,那就是对象方法服务接口,所以Client和Server都需要持有这个对象方法服务接口。一般而言,都是Server端定义好了对象方法接口,并负责具体的实现,然后将对象方法接口告知Client,然后Client也需要在本地创建一个对象方法接口,并不需要具体实现。这样Client就可以调用接口方法,然后由RPC框架负责序列化参数,并交由服务端的具体实现来完成。
对于不同的框架而言,实现方式有点不同:
- Dubbo:通过java反射和动态代理实现这一功能,由于<