假设您正在编写一个必须实现HTTP协议的应用程序。协议相当复杂,可能会允许几个命令,这取决于它们所处的事务阶段。
以SMTP为例。如果在接收"rcpt“和"mail”之前发送了"data“命令,则SMTP服务器必须抛出错误。
我的问题是:在代码中处理此类协议的最佳方式是什么?有没有与此相关的设计模式?
编辑:这个问题与实现协议背后的理论有关。我知道在实践中使用库是最好的方法。
发布于 2008-10-30 07:32:05
状态机
在我看来,状态机是建模和处理协议的最简单方法。通过与接收到的有效命令相关的若干转换将达到一种状态。然后,每个状态将只允许命令的某个子集。
状态机在编译器构造中用于程序的词法分析。我认为协议实现的问题是这种情况的一个特例。
发布于 2008-10-30 07:32:44
处理此类协议的最好方法是使用库。几乎地球上使用的每种计算机语言都有预先存在的、经过良好测试的库来处理http和smtp。
发布于 2008-10-30 12:31:24
@fluffels@
Zed Shaw (Mongrel的作者) agrees with you;他使用Ragel。
https://stackoverflow.com/questions/249493
复制相似问题