跨机器的应用需要制定机器之间通讯的协议,本文在前两节的基础上,主要涉及通讯协议的制定与解析。
一、通讯协议的确定
通讯协议是机器之间交互的“语言格式”,一个合适的通讯协议,是跨机器应用的重要组成部分。
制定通讯协议之前,应考虑以下几方面的内容:
1.协议是一个通用的协议(例如是公司级的某应用领域的协议),还是某个特定应用的协议?
【优缺点不说大家也知道,特定应用协议效率高,解析方便,通讯协议的适用面广,但要牺牲一些效率。】
2.协议采用TCP、UDP传输,还是二者都可以?
【TCP与UDP的传输有自身的一些特点,当一次传输的包比较大时,TCP可以不考虑分包顺序问题,UDP需要考虑;而UDP无需考虑前后两个数据包“粘”在一起的现象,因此可以不需要诸如”包头“、”包尾“之类的东西。】
3.协议采用二进制格式,还是文本格式,如果采用文本格式,是否采用XML?
【二进制协议当然短小、效率高,但如果应用以传输文本为主,二进制是否合适就很难说了,以文本为基础的XML表达力强,扩展方便】
4.通讯时,双方采用“长连接”还是“短连接”?
【需要根据应用而定,从协议本身的组成上,就是通讯是否具有连续性】
5.一次通讯包的大小?
【一般需要指定一个最大值,否则会造成解析麻烦】
6.一次业务通讯来回交互的次数,是否采用“一问一答”式?
【需要根据应用而定,”问答“式协议,效率也许不高,但是一种实现起来比较简单的协议】
以上方面,仅供参考,当然,也可以考虑制定一个综合考虑以上因素的较全面的协议。
二、一个通用的通讯协议的组成
首先,这个协议是基于二进制的,基于文本的XML协议,可以考虑SOAP,其本身就是一个通用的、很强大的协议,本文不讨论SOAP,而是从基础起,构造一个协议。
一个协议大致上看起来如下:
数据包头 |
数据体 |
数据包尾 |
数据包头是整个数据包的描述,通常包括包起始标志、协议版本号、包大小、加密选项、验证码;数据体是具体传输的内容;数据包尾是可选的。对于“应答式"工作方式或采用UDP传输,除验证码之外&#