got*_*ch4 34 c++ java protocols
这是一个通用的问题.我不是在寻找最好的答案,我希望你能表达你最喜欢的做法.
我想用Java实现一个网络协议(但这是一个相当普遍的问题,我在C++中面临同样的问题),这不是第一次,正如我之前所做的那样.但我认为我错过了实施它的好方法.实际上通常都是关于在主机之间交换文本消息和一些字节缓冲区,存储状态并等到下一条消息到来.问题是我通常最终得到一堆开关,并且或多或少复杂的if语句对不同的状态/消息作出反应.整件事情通常变得复杂而难以保持.更不用说有时出现的东西有一些"盲点",我的意思是协议的状态没有被覆盖并且以不可预测的方式表现.我试着写下一些状态机类,负责以或多或少的智能方式检查每个动作的开始和结束状态.这使编程协议变得非常复杂,因为我必须编写行和代码行来覆盖每种可能的情况.我喜欢的是一个好的模式,或者用于编写复杂协议的最佳实践,易于维护和扩展,并且非常易读.
你有什么建议?
S.L*_*ott 16
阅读状态设计模式,了解如何避免大量的switch语句.
"有时会出现一些"盲点",我的意思是协议的状态尚未涵盖......"
国家可以帮助避免差距.它不能保证良好的设计,你仍然必须这样做.
"......因为我必须编写代码行和代码行以涵盖所有可能的情况."
这不应被视为负担或问题:您必须编写代码行以涵盖所有可能的情况.
State可以提供帮助,因为您可以利用继承.它不能保证良好的设计,你仍然必须这样做.
设计协议通常都与您正在使用的应用程序空间有关.例如,http就是处理网页,图形和帖子,而FTP则是关于传输文件.
简而言之,首先,您应该确定您所处的应用程序空间,然后定义需要采取的操作.最后,在你开始设计你的实际协议之前,你应该认真地,认真地寻找另一个做你想做的事情的协议栈,并避免实现协议栈altoether.只有在您确定预先构建的其他内容绝对不适合您之后,才能开始构建自己的协议栈.