我正在重写代码来处理一些嵌入式通信,现在协议处理是在带有大型case / switch语句的While循环中实现的。这种方法看起来有点笨拙。实现通信协议最常用的流量控制方法是什么?
答案 0 :(得分:1)
听起来像“while + switch / case”是一个状态机实现。我相信经过深思熟虑的状态机通常是实现协议的最简单,最易读的方式。
当涉及到国家机器时,打破一些传统的编程规则来自领土。像“每个功能应该少于25行”这样的规则就行不通了。有人甚至认为国家机器是伪装的GOTO。
答案 1 :(得分:0)
如果您关闭协议标头中的字段以引导您进入该协议的下一个处理阶段,则可以使用函数指针数组。您可以使用协议头中的值索引到数组中并调用该协议的函数。
您必须处理此数组中的所有可能值,即使是那些无效的值。最终,您将获得包含无效值的数据包,这可能是因为某人正在尝试攻击,或者因为协议的未来修订会添加新值。
答案 2 :(得分:0)
如果正在处理所有协议,那么切换/案例陈述可能是您最好的选择。但是,您应该将所有单独的消息处理程序分解为它们自己的函数。
如果你的switch语句包含任何实际处理消息的代码,那么最好不要将它们分解出来。
如果它正在处理多个类似的协议,你可以创建一个类来处理基于相同抽象类的每个协议,当连接进来时你可以确定它是哪个协议并创建一个适当的处理程序类的实例来解码和处理通讯。
答案 3 :(得分:0)
我认为这在很大程度上取决于您使用的语言,以及您可以使用的数据集对象类型。
例如,在python中,您可以创建一个包含所有不同处理语句的Dictionary对象,然后只需遍历该对象即可找到要调用的正确方法/函数。
Case / Switch语句并不是坏事,但如果它们变得庞大(就像它们可以使用大量协议处理程序那样),那么它们就会变得难以处理。