通信模块设计说明


特性概述 详细说明
较强的接收容错能力 自动从下一个起始符继续匹配
丰富的协议解析能力 同一个端口支持解析多种协议
灵活的端口转发能力 支持在任意端口之间相互转发(转发时支持协议转换)
良好的协议扩展能力 采用星形拓扑|方便后期扩展

较强的接收容错能力

接收并解析一个正常的数据帧是比较容易实现的,但是有时候我们往往会碰到一些变态的场景或者变态的用户需求,比如说在一堆乱码中混入一个正常帧,又或者是在一个半帧后面接一个正常帧,在这种情况下程序能否正常解析,就很考验程序设计的功力了。目前的方案是,从第一个起始符开始尝试与指定的协议进行匹配,如果匹配成功,则正常返回;如果匹配失败,则自动从下一个字节或者下一个起始符开始继续匹配,直到匹配成功。

丰富的协议解析能力

我个人认为一个端口只支持解析一种协议的设计是很鸡肋的,无法满足一些变态的用户需求。为此,本人设计了一套全新的通信系统,支持在同一个端口上解析多种协议。其原理为,从底层数据缓冲区中一个字节一个字节地读取数据,每拿取一个字节,就与协议库中的若干协议比对一次,直到比对成功。

灵活的端口转发能力

数据帧在单个端口内完成接收、解析、处理、响应的设计是比较简单的,而一旦涉及到转发,事情就变得复杂了。首先,要想在任意端口之间转发,就不能把端口分成上行、下行,左行、右行也不行,所有端口都应该是平等的,且遵循同一套规则。其次,两个端口所用的协议有很大可能是不同的,所以还需要支持协议转换。协议转换详见下一章节。

良好的协议扩展能力

协议转换最容易想到的就是两两转换,不过两两转换在协议少的时候还好说,干就完了,但是后期若是要扩展第三个、第N个协议,两两转换的弊端就显现出来了,其工作量可是呈C₂ⁿ级增长的。而星形拓扑的设计则可以很好地解决这个问题。

协议数量 网状拓扑 O(C₂ⁿ) 星形拓扑 O(n)
2 1 2
3 3 3
4 6 4
5 10 5
6 15 6

通信模块的转发原理