json序列化和反序列化
将xml,json文本反序列化为类对象或结构体对象;xml本地用得比较多,json比较通用;通用json库如cjson,rapidjson,jsoncpp;
判断消息的完整性,区分消息的边界
1、以固定大小字节数目来分界,如每个消息100字节,对端收起100字节,就当成一个消息来解析;
2、以特定符号来分界,如每个消息都以特定的字符如\r\n来结尾,当在字节流中读取到该字符时,则表明上一消息到此为止;
3、固定消息头+消息体结构,这种结构中一般消息头部分是一个固定字节长度的结构,并且消息头中会有一个特定的字段指定消息体的大小,收到消息时,先接收固定字节数的头部,解析这个消息的完整长度,按此长度接收消息体。这是目前各种网络应用用的最多的消息格式;header+body
4、在序列化后的buffer前面增加一个字符流的头部,其中有个字段存储消息总长度,根据特殊字符如\n或\0判断头部的完整性,http和redis采用的时这种方式,收到消息的时候,先判断已收到数据中是否包含结束符,收到结束符后解析消息头,解出这个消息完整长度,按此长度接收消息体;
协议安全
1、xxtea固定key
2、aes固定key
3、openssl
数据压缩
1、deflate nginx
2、gzip
3、lzw
文本可以考虑做压缩,带宽成问题的时候再去考虑;
protobuff
protocol buffers是一种语言中立,与平台无关,可扩展的序列化数据格式,可用于通讯协议,数据存储等;
protocol buffers在序列化数据方面,它是灵活的,高效的。相比xml, protocol buffers更加小巧,更加快速。一旦定义了要处理的数据的数据结构之后,就可以利用 protocol buffers的代码生成工具生成相关的代码。甚至可以在无需重新部署程序的情况下更新数据结构。只需使用protocol对数据结构进行一次描述,即可利用各种不同语言或从各种不同数据流中对你的结构化数据轻松读写;
protocol buffers很适合做数据存储或rpc数据交换格式,可用于通讯协议,数据存储等领域的语言无关,平台无关,可扩展的序列化结构数据格式;