文:徐江威
协议选择
即时消息有两个主要特性:时效性和可靠性。
一般的,为了客户端能及时的接收到消息,并且控制功耗,长连接是首选的连接方式。同样的,为了保证消息的可靠接收,TCP 协议是优先的选择。
报文格式设计
确定了采用 TCP 长连接协议之后,我们需要为我们的协议设计封包格式。
我们明确三点封包设计原则:
- 短报文头
- 报文负载可被分段
- 报文数据可被描述
首先,即时通信数据报文类型大概7到8种即可描述所有主要的通信业务,因此可以使用短报文头来携带报文分类和索引信息,而业务层需要的数据由负载携带而不由报文头携带,这样既能为业务层提供足够的灵活性的同时保证较小的报文结构。
其次,报文负载应该能携带多个数据段,每个数据段可以独立的描述一组数据,从而实现多数据端被封包在一个报文里。
最后,为了兼容不同的操作系统和平台,在进行数据序列化时,需要对不同的数据类型进行对应的序列化方式,而不同的数据类型在每个平台上支持程度不一,例如,浮点数的处理,在 JVM 里的处理和在浏览器里使用 JavaScript 处理就有明显差异。因此,对数据进行必要的描述以便在不同平台之间平滑的描述数据。
|--|-00-|-01-|-02-|-03-|-04-|-05-|-06-|-07-|
|--|---------------------------------------|
|01| VER| SN | RES | PN |
|--