导语:RPC(remote procedure call:远程过程调用)通常指计算机程序使过程(子例程)在不同的地址空间(通常在共享网络上的另一台计算机上)执行时,其编码就像是正常的 ( local) 过程调用,无需程序员显式编码远程交互的细节。也就是说,无论子程序是执行程序的本地程序还是远程程序,程序员都编写基本相同的代码。这是一种客户端-服务器交互形式(调用者是客户端,执行者是服务器),通常通过请求-响应消息传递系统实现。在面向对象的编程范式中,RPC 表示为远程方法调用(RMI)。RPC 模型意味着一定程度的位置透明性,即调用过程无论是本地的还是远程的都基本相同,但通常它们并不相同,因此可以将本地调用与远程调用区分开来。远程调用通常比本地调用慢几个数量级且可靠性较低,因此区分它们很重要。
RPC 是进程间通信(IPC)的一种形式,因为不同的进程有不同的地址空间:如果在同一台主机上,它们有不同的虚拟地址空间,即使物理地址空间相同;而如果它们在不同的主机上,物理地址空间是不同的。许多不同(通常不兼容)的技术已被用于实现该概念。 ---------维基百科 事实上RPC与AJAX有很多相似的地方:
- 都是两台计算机之间的通信
- 都会约定数据格式
当然二者也有很多不同的地方:
- RPC不一定基于DNS服务器作为寻址服务
- 应用层协议一般不是用HTTP协议(RPC是二进制流)
- 基于TCP或者UDP协议
寻址服务器的不同
AJAX请求方式
主要原因在于计算机并不是通过域名来定位到目标计算机,而是通过域名对应的IP地址,实现计算机之间的远程通信,因此AJAX在浏览器中拿到域名必须要向DNS服务器发送请求,拿到DNS服务器返回的具体的IP地址(DNS服务器有多级,计算机会首先请求本地DNS,如果没有找到才会去访问远程DNS服务器),具体过程如下图所示。
RPC请求方式
RPC请求方式自然也不可能直接根据域名去定位目标计算机,但是它可以有其它的方式,比如在一个内网系统中,每一台计算机都有自己的编号,因此就可以直接根据内网计算机编号直接定位到计算机,如腾讯的L5,阿里的虚拟IP(VIP)等,那么自然,这种请求方式也必然需要一个寻址服务器(不一定是DNS,但是和DNS功能类似)
通信方式不同
AJAX采取以TC连接PHTTP通信的方式
HTTP工作模式:
http1.0:单工。因为是短连接,客户端发起请求之后,服务端处理完请求并收到客户端的响应后即断开连接。http1.1:半双工。默认开启长连接keep-alive,开启一个连接可发送多个请求。http2.0:全双工,允许服务端主动向客户端发送数据。
RPC二进制协议优势
- 更小的数据包体积(二进制数据而非文本数据)
- 更快的编解码速度(计算机对二进制数据的编解码速度很明显高于对文本数据的编解码速度!)