RPC是指远程过程调用,通俗地讲,就是本地通过网络连接调用远程的方法,
(与之相对应的,就是我们常用的本地调用,即在本地直接调用方法)。
简单地说,一次RPC调用涉及client、clientProxy、serverProxy、server这四个点,具体步骤如下:
1、client发起方法调用,调用clientProxy的方法;
2、clientProxy收到调用请求后,对请求信息进行编码,经网络传输给serverProxy,进行方法调用;
3、serverProxy收到clientProxy的请求后,对请求信息进行解码,然后调用server中的方法的实际实现;
4、server收到请求后,进行实际方法的调用,;
之后是上述过程的反向流程,即将结果返回。
经过上述介绍,在RPC实际实现中,我们还需要解决三个问题:
1、server需要事先提供方法接口,只有这样,clent才知道有哪些方法可以调用
这需要我们以某种方式生成接口,含义一样,但对各方都能理解和使用的接口
2、clentf需要知道server的地址
这里我们可以使用zookeeper进行地址注册,当然也可以用其它方式,如数据库,redis等,可以根据具体场景使用
3、clientProxy和serverProxy需要共同约定传输报文格式,其实也就是协议,只有这样,在编写或读取报文时,能明白是什么意思
那么传输报文格式,需要哪些内容呢,其实也就是普通方法调用需要的内容,
简单说,包括两项,即:
a) 请求报文(即方法调用的传参),具体包括:接口名、方法名、方法参数
b) 响应报方(即方法调用的结果),具体包括:响应结果
再往下面就是通常网络协议需要的一些东西,即具体的设计,各种RPC框架(如rmi、dubbo、thrift等)有不同的实现,在此不细说了。