我编写了许多网络系统,并且对网络的工作方式有很好的了解。然而,我总是最终拥有一个数据包接收功能,这是一个巨大的 switch 语句。这开始影响到我了。我宁愿采用一种优雅的面向对象的方式来处理接收数据包,但每次我试图提出一个好的解决方案时,我总是会失败。
例如,假设您有一个网络服务器。它只是在那里等待响应。一个数据包进来,服务器需要验证数据包,然后它需要决定如何处理它。
目前,我一直在通过打开标头中的数据包 ID 来执行此操作,然后进行大量处理每种数据包类型的函数调用。对于复杂的网络系统,这会导致一个单一的 switch 语句,我真的不喜欢这样处理它。我考虑过的一种方法是使用处理程序类的映射。然后我可以将数据包传递给相关的类并处理传入的数据。我遇到的问题是我需要一些方法来用地图“注册”每个数据包处理程序。这意味着,通常,我需要创建类的静态副本,然后在构造函数中将其注册到中央数据包处理程序。虽然这很有效,但它看起来确实是一种不优雅且繁琐的处理方式。
编辑:同样,拥有一个双向工作的好系统也是理想的。即一个类结构,可以轻松处理发送与接收它们相同的数据包类型(显然通过不同的功能)。
谁能指出我处理传入数据包的更好方法?非常感谢链接和有用的信息!
抱歉,如果我没有很好地描述我的问题,因为我无法很好地描述它也是我从未设法提出解决方案的原因。