
因此需要进行编解码,或者说在编解码之前如果不为一个完整的数据包,应该进行拼包操作,而且如果发送端一次性发送多个数据包,也可以进行凭借编解码进行逐一解析操作。
在编解码之前一般还需要进行一个校验操作(比如我们规定前面2-n个字节必须为某一标识等),用于快速校验接收的数据包是否是我们所需的,这样可以高效利用服务端资源。
编解码的对象是一堆二进制数据流,**对二进制数据流按照一定的规律进行处理,我们称之为编解码。**从这堆数据流中截取完整的数据包交给业务逻辑层进行处理(解码)。而业务逻辑层下发发送指令时,需要将指令或者数据包进行打包(编码)。一般情况下,数据包中应包含消息头、消息长度、协议号(指令类型)、协议体(具体内容)等。
如下面所示的图例(示例):

即不管我们是客户端发送数据还是服务端接受数据,我们只接收(识别)这种类型的数据包。
注意,在编解码的过程中可能需要对数据包进行压缩/解压缩,以及为了应对网络环境,还需对数据包进行加密/解密步骤。
序列化/反序列化实际上就是将内存中的实例对象(类/结构体)转换为二进制数据(序列化),或者将二进制数据转换为内存中的实例对象(类/结构体)(反序列化)的过程。
在这个过程中如果我们客户端和服务端是使用同一种开发语言进行开发的,那么我们无需考虑其它问题,但是一般情况下客户端和服务端的开发语言可能不相同,那么这时我们需要用到一些工具来解决开发语言的问题。
当前较为常用的工具包括ProtoBuf、JSON、BSON、MsgPack、FlatBuffers、XML等。
在该过程我们主要是对业务逻辑进行处理分发。