协议序列化分类:
二进制【子类型:C结构体,IIOP等等】 文本【子类型:XML序列化,JSON等等】
协议控制分类:
长度控制型【每个字段的用长度字段来控制】 控制字符型【用控制字符来描述字度的开始结束】
协议标识的用处:
区分不同协议,让不同协议可以在同一管道里传输
用于错误恢复,相当于同步头,协议内容错误时可以用它来同步恢复
版本号,属于防御性字段,用于识别客户端协议类型,大部分时候可以同时作为客户端类别识别号
原则:
一个字段最好只有一个意义,这样程序的扩展性,正交性都比较好,但考虑到系统开销等实际问题时,有会合并某些字段,降低一定的扩展性来获得性能
无论一个字段有多少个意义,概念上最好是独立的
字段的具体意义会不断的得到精炼而抽象出来,是个渐进的过程,根据对业务的需求不断改进,不能一步到位,开始设计的时候尽量参考别人的设计
对于交互性程序的协议,一般都需要客户端标识号【就是登陆用户名】
协议层次带来的好处:
降低系统的复杂度
增加系统的重用性
具体可以看TCP-IP协议层次
缺点:
开销大
不能统筹
不同类型的协议最好不要混用,尤其是协议控制分类
长连接的心跳
长连接优点,可以做及时做事件通知,在交互性强的程序里可以节省资源
短链接的优点,对于非高交互的程序可以简化编程,节省服资源,且错误几率低 【对于互相可见程序可以及时回调】,如果使用HTTP,对防火墙友好