去年和今年分别参与了两个公司的项目,这两个项目都涉及到了通信方面的程序设计,或者是以太网络通信,或者是串口通信。凡是通信就必须要有通信协议,个人认为协议的设计是个非常严肃的工作,需要理解业务需求和掌握基本的协议设计知识。但是从这两个项目来看,其协议的设计可以说是 糟糕到了极点。下面就其糟糕的设计之处予以批判。
1 糟糕设计之一:消息格式“包头+数据+包尾”
与UDP不同,TCP通信属于流式通信,没有消息边界,所以需要应用层自行对报文进行界定分离。实际项目1中,包头为{ {两个字节,包尾为}}两个字节,例如{ {t=123}}。其格式为:
开始边界+消息1+结束边界+开始边界+消息2+结束边界+开始边界+消息3+结束边界+....
由于TCP是安全的传输层协议,除非特别需要,应用层无需再做校验。消息边界只需要一个标识即可,基本格式为:
消息1+边界+消息2+边界+消息3+边界+...
无论从节约网络带宽,还是从简化报文解析代码,第一种设计都是非常的愚蠢!
无独有偶,项目2中基于串口的通信应用层协议也采用了这种设计格式。
当问其设计人员为何如此设计时,说一直就是这么设计的,自己也不知道这么设计的原因,还美滋滋地说一直没有什么问题,真想揍他一拳。