远程RPC调用实现过程

Posted shixing

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了远程RPC调用实现过程相关的知识,希望对你有一定的参考价值。

远程RPC调用

远程调用的过程

想要完成调用,你需要解决四个问题:客户端和服务端如何建立网络连接?服务端如何处理请求?数据传输采用什么协议?数据该如何序列化和反序列化?

客户端和服务端如何建立网络连接

客户端和服务端之间基于 TCP 协议建立网络连接最常用的途径有两种。1. HTTP 通信。2. Socket 通信。

一次 HTTP 通信过程就是发起一次 HTTP 调用,而一次 HTTP 调用就会建立一个 TCP 连接,经历“三次握手”来建立链接,完成请求后,又经过“四次挥手”来断开连接。

Socket 通信是基于 TCP/IP 协议的封装,建立一次 Socket 连接至少需要一对套接字,其中一个运行于客户端,称为 ClientSocket ;另一个运行于服务器端,称为 ServerSocket 。就像下图所描述的,Socket 通信的过程分为四个步骤:服务器监听、客户端请求、连接确认、数据传输。

服务端如何处理请求

BIO;NIO;AIO;

数据传输采用什么协议

最常用的有 HTTP 协议,它是一种开放的协议,各大网站的服务器和浏览器之间的数据传输大都采用了这种协议。还有一些定制的私有协议,比如阿里巴巴开源的 Dubbo 协议。

数据该如何序列化和反序列化

一般数据在网络中进行传输前,都要先在发送方一端对数据进行编码,经过网络传输到达另一端后,再对数据进行解码,这个过程就是序列化和反序列化。序列化是解决内存数据到字节流的相互转换的,其次可以压缩数据,这也是评估一种序列化方式的优劣因素之一。

总结

通信框架。它主要解决客户端和服务端如何建立连接、管理连接以及服务端如何处理请求的问题。

通信协议。它主要解决客户端和服务端采用哪种数据传输协议的问题。

序列化和反序列化。它主要解决客户端和服务端采用哪种数据编解码的问题。

这三个部分就组成了一个完整的 RPC 调用框架,通信框架提供了基础的通信能力,通信协议描述了通信契约,而序列化和反序列化则用于数据的编 / 解码。一个通信框架可以适配多种通信协议,也可以采用多种序列化和反序列化的格式,比如服务化框架 Dubbo 不仅支持 Dubbo 协议,还支持 RMI 协议、HTTP 协议等,而且还支持多种序列化和反序列化格式,比如 JSON、Hession 2.0 以及 Java 序列化等。

以上是关于远程RPC调用实现过程的主要内容,如果未能解决你的问题,请参考以下文章

UE4网络之(二) 远程调用函数(RPC)

Java分布式:RPC(远程过程调用)

使用golang 实现JSON-RPC2.0

Java讲解RPC的基本实现

Java讲解RPC的基本实现

7.Go语言高并发与微服务实战 --- 远程过程调用 RPC