点击上方蓝色字体,关注我啦~~
背景
随着 Nodejs 的兴起,越来越多的 Web 服务中间层被搭建起来。如 Node 服务端渲染,BFF(Backend For Frontend))层,而 RPC 是远端过程调用,经常用于 BFF 层。最近,我打算写一个中间层,用 Nodejs 调用 Go 服务,除了可以简单用 http 调用之外,发现还有基于 RPC 的调用就研究了一下。
RPC简介
RPC(Remote Procedure Call)中文名「远程过程调用」,拆开理解,「过程」也叫方法或函数,「远程」就是说方法不在当前进程里,而是在其他进程或机器上面,合起来 RPC 就是调用其他进程或机器上面的函数。简单讲,就是本地调用的逻辑处理的过程放在的远程的机器上,而不是本地服务代理来处理。一个完整的 RPC 框架主要有三部分组成:通信框架、通信协议、序列化和反序列化格式。
前端视角看RPC
与 Ajax 对比相同点
都是两个计算机之间的网络通信,Ajax 是浏览器和服务器通信,RPC 是服务器和服务器通信
都需要双方约定一个数据格式
与 Ajax 对比不相同点
RPC 调用不一定使用 DNS 作为寻址服务,Ajax 一般是浏览器向服务器请求,请求地址一般是
https://域名/xxx
,服务器需要根据域名区寻找对应的 IP 地址,这就是 DNS 寻址过程,而 RPC 一般用在内网之间互相请求,一般使用特有服务进行寻址。RPC 应用层协议一般不使用 HTTP,一般使用一些二进制协议,其优点是数据包体积更小、编解码速率更快。
RPC 基于 TCP 或 UDP 协议,其中 TCP 通信又存在多种通信方式,单工通信[两个服务器之间,只允许单向发送消息,如只能 A 给 B 发消息]、半双工通信[两个服务器之