消息头
一、消息头主要几点要素及作用
消息版本号:用于处理版本兼容问题;能够处理新消息也可以处理老系统传过来的消息
消息序列号:用于跟踪消息的全生命周期唯一编号
消息延续标致:消息内容过长,如标志位是,则将该消息放入延续接受队列,后续判断序列号相同的话调用延续接收接口,否则按正常接收接口
消息数据长度:消息头中的消息数据长度其实并不是作为从消息头后面接收二进制字节的长度依据。
请求消息:消息数据长度= 消息类型块长度+消息体长度;
回复消息(无错误信息):消息数据长度=消息类型块长度+消息体长度;
回复消息(有错误信息):消息数据长度=消息类型块长度;
二、跨平台问题注意要点
1、Little Endian(小端格式) 和 Big Endian(大端格式),Little-endian:将低序字节存储在起始地址(低位编址),Big-endian:将高序字节存储在起始地址(高位编址),用XDR表示法能够很好解决该问题。
2、32位与64位,不同操作系统下的 同一语言的数据类型长度是有可能不一样的。不同的编程语言的相同名字的数据类型的长度也可能是不一样的。在XDR接口调用时去规避该问题,例如long型 与int型 都同一用xdr_int来处理。
3、UTF8和UTF16的转换,做好不同平台的转换,例如Linux/UNIX c/c++ 传向java 时将字符串转换为UTF16,反之再转换。能否统一输出呢?在输入端明确必须UTF8,输出后也转换成utf8呢?
文档中的内容截取自何小朝著《消息涉及与开发》一书中及自己的部分理解。