实现协议的最佳方法是什么?

时间:2008-10-30 07:29:51

标签: design-patterns protocols

假设您正在编写必须实现HTTP协议的应用程序。协议非常复杂,可能允许多个命令,具体取决于它们所处的事务处理阶段。

举个例子,看看SMTP。如果在接收“rcpt”和“mail”之前发送“data”命令,SMTP服务器必须抛出错误。

我的问题是:在代码中处理诸如此类协议的最佳方法是什么?有没有与此相关的设计模式?

编辑:这个问题与实施协议背后的理论有关。我知道使用库是实践中最好的方法。

4 个答案:

答案 0 :(得分:12)

状态机

在我看来,状态机是建模和处理协议的最简单方法。通过与所接收的有效命令相关的若干转换将到达状态。然后,每个州只允许某个命令子集。

状态机用于编译器构造,用于程序的词法分析。我将协议实现的问题视为一种特殊情况。

答案 1 :(得分:1)

处理此类协议的最佳方法是使用库。几乎所有在地球上使用的计算机语言都有预先存在的,经过良好测试的库来处理http和smtp。

答案 2 :(得分:0)

@fluffels @

Zed Shaw(Mongrel的作者)agrees with you;他使用Ragel

答案 3 :(得分:-1)

我同意a28,最好的方法是:

  • 使用实现协议服务器的库
  • 将您的应用程序编写为现有服务器的扩展(例如,通过IIS的Web服务器扩展,Apache API等,Sendmail Milter等)或
  • 修改现有服务器,以便在收到请求时对应用程序进行RPC调用。

编写自己的协议实现可能会导致实现互操作性问题的错误。

这是一个有趣的工具twisted,它是特定于python的,但非常聪明,包括许多现有协议(HTTP,SMTP,IRC等)的实现。