RPC之序列化和反序列化
序列化和反序列化是RPC中非常重要的部分了,也是RPC中必不可少的一部分。
- 序列化-即将调用的对象转换成可传输的字节序列
- 反序列化-即将接收到的字节序列转换成对象
当我们使用RPC调用一个方法时,先将我们调用的方法和参数进行序列化,将序列化后的字节序列传输到RPC服务提供者。
当RPC服务提供者收到请求后,进行反序列化将收到的字节序列转换成具体的方法和参数,然后再去执行对应的方法。接着将执行后的结果进行序列化,再传输给调用方。
调用方收到响应的字节序列后,将数据进行反序列化,就得到了调用结果对象。
一次普通的RPC调用,至少要经过上面的两次序列后和两次反序列化。
序列化和反序列化需要一中序列化规范,即序列化前的对象和序列化后的字节之间的一种对应关系。常见的序列化,如json,hessian2,protobuf等。Java中,最基本的就是java自带的Serializable接口了。
由于json是一种可读的文本协议,所以常用于HTTP中。而hessian2和protobuf都是一个二进制协议,序列化后字节序列更小,所以传输速度快,因此这两种协议常用于RPC中序列化和反序列化。