无状态协议的参数(上下文:简单的点对点通信)

时间:2009-12-22 16:31:46

标签: communication protocols

(所以this question has been asked before,但在一般意义上,大多数回复都是在与多个服务器/客户端/等的一般网络通信的背景下。)

在简单的点对点通信协议的上下文中,有状态和无状态协议的优点/缺点是什么?我的直觉是无状态更好(假设接触HTTP很多)使用简单的命令响应数据包,但我不知道为什么。我还与一位主管一起工作,该主管在使用状态协议和序列号,连接建立方法等方面有很多经验,并且他一直鼓励我使用有状态协议。我们陷入了一些僵局,似乎无法让对方相信正确的方法。

Another question about simple point-to-point communications protocols提出了一些很好的例子,即HDLC(有状态)和MODBUS(无国籍)。

1 个答案:

答案 0 :(得分:2)

如果从对话的角度来看协议,可能会更容易。

在无状态协议中,没有“Hello”或“Goodbye”。每个请求都只是“给我那个”,“拿这个”等,每个请求都是自己的。如果客户端给服务器一些东西,它并不关心服务器用它做什么。如果客户端需要知道它给服务器的内容,那么它将再次要求验证。

这种(无状态)听起来不错,对两个独立的进程(服务器和客户端)有好处,特别是如果它们是松散耦合的。

但是如果有两个协作进程,其中两个任务相互依赖,一个需要另一个的输出才能使它们都成功,那么无状态会增加开销,因为每个通信和操作都需要通过问题进行验证。或者需要在两者之间共享一组上下文。

想想一位外科医生和她的助手处理她的工具。外科医生说“scapel”,她知道当她把手术刀放在她手里时,沟通已经完成。 “有状态”助手可以跟踪通信状态,并知道“scapel”将在“抽吸”或“牵引器”命令之后,并准备好适当的仪器。所以谈话有一个状态 - 开始和结束 - “你好”和“再见”。这很好,因为它可以减少延迟并降低通信开销。

你可以使外科医生/助理协议无国籍 - 但这会影响整体结果的质量吗?