1. 基本概念
- 跨网络、跨进程的方法调用
- 因为客户端和服务端位于网络上不同的地址,要完成一次rpc调用,则需要以下步骤
- 首先建立网络连接
- 建立连接后,双方需要按照某种约定的协议进行网络通信
- 能正常通信后,服务端收到请求后需要以某种方式处理,处理完成后把请求结果返回给客户端
- 为了减少传输数据大小,还需要对数据进行序列化与反序列化
2. 连接方式
- 可以基于HTTP通信
- 但是一次http通信就需要一次三次握手,四次挥手。反复建立和销毁tcp连接,速度不够快。
- 基于TCP通信
- 也就是基于Socket通信,可以维持长连接,速度更快
- 客户端和服务端通信还要有以下机制保证
- 链路存活检测,客户端定时发送给服务端心跳检测,检测链路状态
- 断连重试
3. 服务端处理请求方式
- 同步阻塞方式:客户端一个请求,服务端对应一个线程去处理。
- 同步非阻塞方式:基于IO多路复用,把多个IO的阻塞复用到同一个select的阻塞上。
- 异步非阻塞方式:基于AIO,实现困难,理论上效率最好
4. 数据传输协议
- 协议一般包括协议头和内容体
- 协议头:消息长度,消息类型,头部长度,其他信息
- 内容体:真实想传递的数据
- 可以基于http协议
- 也可以自定义协议
5. 序列化与反序列化
- 序列化与反序列化说的是内容体采用什么要的数据编码问题
- 解决客户端和服务端采用哪种数据编解码的问题
- 可以基于文本协议如json,但是最终网络传输还是二进制形式
- 也可以基于自定义编码协议如thrift