java - 如何实现网络协议(protocol)?

标签 java c++ protocols

这是一个通用问题。我不是在寻找最佳答案,我只是想让你表达你最喜欢的做法。

我想用 Java 实现一个网络协议(protocol)(但这是一个相当普遍的问题,我在 C++ 中遇到了同样的问题),这不是第一次,因为我以前做过。但我认为我缺少实现它的好方法。实际上,通常都是关于在主机之间交换文本消息和一些字节缓冲区,存储状态并等待下一条消息到来。问题是我通常会得到一堆 switch 和或多或少复杂的 if 语句,它们对不同的状态/消息使用react。整个事情通常变得复杂且难以维护。更不用说有时出来的东西有一些“盲点”,我的意思是协议(protocol)的状态还没有被覆盖并且以不可预测的方式运行。我试图写下一些状态机类,它们以或多或少的智能方式负责检查每个操作的开始和结束状态。这使得协议(protocol)编程变得非常复杂,因为我必须编写一行又一行的代码来涵盖所有可能的情况。 我想要的是一个好的模式,或者是用于编程复杂协议(protocol)的最佳实践,易于维护和扩展并且非常易读。

你有什么建议?

最佳答案

阅读 State 设计模式,了解如何避免使用大量 switch 语句。


“有时出来的东西有一些“盲点”,我的意思是尚未涵盖的协议(protocol)状态......”

状态可以帮助避免差距。它不能保证一个好的设计,你仍然必须这样做。

“...因为我必须编写一行又一行的代码来涵盖所有可能的情况。”

这不应被视为负担或问题:您必须编写代码行来涵盖所有可能的情况。

State 可以提供帮助,因为您可以利用继承。它不能保证一个好的设计,你仍然必须这样做。

关于java - 如何实现网络协议(protocol)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2450408/

相关文章:

java - Collection 抛出或不抛出 ConcurrentModificationException 基于 Collection 的内容

c++ - 使用 SDL2 渲染文本,更新纹理/输出时出现问题

c++ - 我应该使用 rand() 还是 rand_r()?

c++ - 错误 C2678 : binary '>>' : no operator found which takes a left-hand operand of type 'std::basic_istream<_Elem,_Traits>'

Swift 协议(protocol) : Why does the compiler complain that my class doesn't conform to a protocol?

java - 我的程序正在访问哪些库?

java - 用 JUnit 比较两个对象显示奇怪的行为

ios - 更新 TableView 上的所有单元格而不使操作太 "heavy"内存

ios - 使用 Swift 进行 TableViewCell 委托(delegate)

java - 如何在不在 JPA 中加载相关实体的情况下使用外键保存实体?