什么是RPC

      之前不了解什么是rpc,特意去百度了一下,然后给的解释就是:rpc的全称是远程过程调用,他是一种通讯协议,说的那么官方,一点实质性的解释都没,反正是云里雾里的。经过反复的去了解和学习,多多少少有一些了解,下面我就用具体案例来解释一下,到底tm的什么是rpc,到底这个rpc是个啥玩意。

     废话不多说:直接开始下面案例

案例1:有一台笔记本,你现在需要把笔记本里面的小电影放到移动硬盘里面,打算晚上回家好好研究研究这里面的考研资料,当你兴致勃勃的拿出移动硬盘,打算往电脑里面插的时候,你发现怎么都插不进去,这个时候,你仔细一看,原来你的移动硬盘上面的数据线是type-A的接口,你笔记本是type-c的接口,笔记本很无奈的移动硬盘说:对不起,我们不合适。你别想着插我,你插不进。从这个案例中,可以看出,两个不同的usb接口,没法进行通讯的,只有移动硬盘将type-A换成type-C,才能将电脑里面的小电影拷贝过来,那这案例和rpc有啥关系呢?那我就好好和你说一下他们的相同点,首先rpc叫做远程过程调用,是一种通讯协议,这远程过程调用,是不是得至少两个载体呢?一个请求,一个接受接收并且适当时候给出反馈。针对案例1中,移动硬盘和笔记本,一个要接收小电影,一个要把小电影拷贝到硬盘上。另外他是一种协议,对应的是不是就是笔记本和移动硬盘必须要是同一款usb接口。如果这样理解,是不是就能解释通了呢?因此rpc可以理解为:A通过一种方式向B发送一个特定的消息,并且B能理解,B在接收到A的消息后,根据设定的条件来取决是否给A发送反馈。

   那么就有人提出问题了,如果这样说的话,http是不是就是rpc呢?

      其实http和rpc还是有区别的,非要说的话,那可以说:可以使用http这种协议去实现rpc的调用,因为rpc是一种协议而不是一个具体的实现,他是通过一种指定的通讯协议去实现服务和服务之间的数据通讯。就好比spring-cloud的@feign调用,就是通过http去实现rpc的调用。但是实现rpc调用可以用多种方式,可以用http实现也可以用socket,netty,mq等方式去实现,而http的实现,他只能遵循http的规范才能实现服务和服务之间的通讯。说的那么绕口可能有点难以理解,下面我在举个简单的例子。

案例2:一起走进法外狂徒张三和他媳妇小芳的世界。有一天小芳在家烧饭,张三在田里耕地,小芳发现家里的酱油没了,这时候她又没法自己去买酱油,这个时候,她只能叫张三去买,这个时候,她可以直接到门口去喊张三去买酱油,也可以打个电话给张三让他去买酱油,也可以让隔壁邻居张二狗帮忙去和张三说一声让他去买酱油,也可以让自己的儿子王富贵去和张三说一声让他去买酱油,也可以发微信和张三说,也可以发短信和张三说等等,他可以有N多种方式去把这个消息传递给张三,从这个案例中可以知道,小芳让张三去买酱油,可以通过直接喊,或者叫人,或者打电话,或者发微信,或者发短信等N多种方式,这些方式就可以看作rpc里面的一种通讯方式,而http,可以比作通过打电话的方式去告诉张三,当然打电话的要求,必须:两个有手机,手机不欠费,要知道张三电话号码等等要求,这些可以看作http实现的一些要求,比如要有url,要有heard等。但是小芳要是没电话,或者不知道张三号码,他就没法传递这个消息了么?他可以通过其他方式去实现。所以从宏观上来说,rpc的范围要比http更广,他可以称作一种规范,也就小芳把买酱油这个事通过某种方式去告诉张三,具体怎么实现,那就通过具体的通讯方式去实现,因此针对于http和rpc的关系,可以说:服务和服务之间通过可以通过http这种方式去实现rpc。但是不能说http就是rpc。当然针对同一种通讯方式也是要满足通讯要求的,就好比小芳是个非洲娘们,不会说普通话,张三是个地地道道的农民听不懂非洲话,小芳对着张三一顿子非洲语输出,张三也听不懂这娘们说啥,最后这酱油张三肯定买不成了。

通过这俩案例讲解,应该能多多少少知道什么是rpc了吧,对rpc有更多兴趣的人可以下载一个rpc的demo,地址:https://github.com/young287/spring-rpc-demo 这是我写的一个机遇springcould的demo,通过socket的通讯方式实现rpc的调用,希望能对您老有更多的帮助,要是觉得有帮助,就帮我github上面点个星。谢了,里面还涉及了一些spring源码的知识点,要是想学习spring源码的话,我的公开项目里面也有一个spring源码,里面有各个重点的注释,有兴趣的也可以下载下来了解一下,包括里面还有spi实现的demo案例,觉得有帮助的点个星,让我装个B,谢谢了

你可能感兴趣的:(什么是RPC)