前言
nodejs让前端工程师有了开发后端服务的机会,而想要进行后端开发则必须要先理解一些后端思维和后端基础必备知识。RPC通信是在后端开发中经常用到的一种通信手段。这块基础知识必须要理解。
什么是RPC通信?
RPC (Remote Procedure call) 翻译过来就是: 远程过程调用
它是服务端之间常用的通信技术。我们可以理解为 服务A 与 服务B 之间进行通信就是RPC通信。这让我们容易想起浏览器与后端服务的通信:Ajax。
RPC通信 与 Ajax有什么异同?
首先说一下相同点:
-
都是两个计算机之间的通信
浏览器发http请求向服务器进行请求数据 -
需要双方约定一个数据格式进行数据交换
双方约定发送格式一般是json格式
然后是不同点:
-
RPC是指服务器与服务器的通信,而AJax是客户端与服务器的通信
-
Ajax请求服务是通过DNS寻址服务去拿到服务器的真正ip地址再通过这个ip地址请求数据的,而RPC是不用DNS寻址服务的,因为一般内网服务之间都有自己的一套身份识别系统,服务器的地址不一定是通过ip地址去访问,它可以是内网自定义的一个地址,同样服务之间的通信也是先寻址再通信,不过Aajx是通过DNS寻IP地址, RPC是通过内网服务寻另外一个服务的(内网系统自定义的)地址。
3.RPC通信一般不用http协议进行,而是用一些二进制协议,因为二进制协议更轻量,更快,更接近计算机理解的形式,所以有更快的编解码速率,有性能上的优势。(说到这里应该可以理解http2为什么会采用二进制帧进行数据传输了,对http2不熟悉可以参考我另外一篇博客 http2,让首屏性能提升30%的一次实践)
- RPC基于TCP / UDP协议,而Ajax就是基于TCP/HTTP协议
当RPC基于TCP通信时也还有几种情况:
- 单工通信
服务A 与服务B通信只能由一方发数据,另外一方只能接收数据,即只能A发B收或者B发A收,一直都是单方面发,单方面收 - 半双工通信
半双工通信比单工通信好点,可以A发B收,也可以B发A收,但是呢有个规矩,比如A发时,B只能等A发完收到A的数据后才能进行发送,同样B发时 A只能等B发完收到B的数据后才能进行发送。即同一个时间只能一个发,另外一个不能发。 - 全双工通信
这种方式更加方便,没有什么限制,A或者B随时都可以发送接收数据。
可能看到这里你会问,既然全双工这么好用就用它就行了,还要什么单工 半双工干嘛?
问得好!全双工通信确实好 ,但是呢,这里涉及到一个实现成本 与 实现难度的问题,全双工通信实现成本与难度必定比其他两种方式要高,具体业务中要哪种通信方式还是要根据实际情况来考虑的。
最后
看完之后是不是觉得RPC通信也不是那么难理解的呢?哈哈。如有不对或者疑惑请在留言区提出,不胜感激。
网友评论