浅析源码解读grpc-go系列文章的第一篇?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1880个文字,预计阅读时间需要8分钟。
最近学习过RPC相关知识,如果让我从头设计一个RPC,从用户角度出发,确实需要做以下工作:
1. RPC本质上是远程调用,所以需要定义数据传输的格式和协议。
2.设计服务接口,包括方法名称、参数类型和返回类型。
3.实现序列化和反序列化机制,将调用参数和返回值转换为网络传输的数据格式。
4.实现客户端和服务端的通信,包括建立连接、发送请求和接收响应。
5.考虑错误处理和超时机制,确保调用稳定可靠。
6.实现服务注册和发现机制,方便客户端查找和调用服务。
最近在学习 rpc 相关的知识,如果让我去从头设计一个 rpc,我从使用者的角度出发,究竟需要去做一下什么工作?
第一,RPC 本质上就是一个远程调用,那肯定就需要通过网络来传输数据。虽然传输协议可以有多种选择,但考虑到可靠性的话,我们一般默认采用 TCP 协议。为了屏蔽网络传输的复杂性,我们需要封装一个单独的数据传输模块用来收发二进制数据,这个单独模块我们可以叫做传输模块。
第二,用户请求的时候是基于方法调用,方法出入参数都是对象数据,对象是肯定没法直接在网络中传输的,我们需要提前把它转成可传输的二进制,这就是我们说的序列化过程。但只是把方法调用参数的二进制数据传输到服务提供方是不够的,我们需要在方法调用参数的二进制数据后面增加“断句”符号来分隔出不同的请求,在两个“断句”符号中间放的内容就是我们请求的二进制数据,这个过程我们叫做协议封装。
第三,为了传输性能的进一步提高,我们还可以在协议模块中加入压缩功能,这是因为压缩过程也是对传输的二进制数据进行操作。在实际的网络传输过程中,我们的请求数据包在数据链路层可能会因为太大而被拆分成多个数据包进行传输,为了减少被拆分的次数,从而导致整个传输过程时间太长的问题,这就是数据压缩和解压。
本文共计1880个文字,预计阅读时间需要8分钟。
最近学习过RPC相关知识,如果让我从头设计一个RPC,从用户角度出发,确实需要做以下工作:
1. RPC本质上是远程调用,所以需要定义数据传输的格式和协议。
2.设计服务接口,包括方法名称、参数类型和返回类型。
3.实现序列化和反序列化机制,将调用参数和返回值转换为网络传输的数据格式。
4.实现客户端和服务端的通信,包括建立连接、发送请求和接收响应。
5.考虑错误处理和超时机制,确保调用稳定可靠。
6.实现服务注册和发现机制,方便客户端查找和调用服务。
最近在学习 rpc 相关的知识,如果让我去从头设计一个 rpc,我从使用者的角度出发,究竟需要去做一下什么工作?
第一,RPC 本质上就是一个远程调用,那肯定就需要通过网络来传输数据。虽然传输协议可以有多种选择,但考虑到可靠性的话,我们一般默认采用 TCP 协议。为了屏蔽网络传输的复杂性,我们需要封装一个单独的数据传输模块用来收发二进制数据,这个单独模块我们可以叫做传输模块。
第二,用户请求的时候是基于方法调用,方法出入参数都是对象数据,对象是肯定没法直接在网络中传输的,我们需要提前把它转成可传输的二进制,这就是我们说的序列化过程。但只是把方法调用参数的二进制数据传输到服务提供方是不够的,我们需要在方法调用参数的二进制数据后面增加“断句”符号来分隔出不同的请求,在两个“断句”符号中间放的内容就是我们请求的二进制数据,这个过程我们叫做协议封装。
第三,为了传输性能的进一步提高,我们还可以在协议模块中加入压缩功能,这是因为压缩过程也是对传输的二进制数据进行操作。在实际的网络传输过程中,我们的请求数据包在数据链路层可能会因为太大而被拆分成多个数据包进行传输,为了减少被拆分的次数,从而导致整个传输过程时间太长的问题,这就是数据压缩和解压。

