(所以 this question has been asked before ,但在一般意义上,大多数响应都是在与多个服务器/客户端/等的一般网络通信的上下文中)
在简单的点对点通信协议(protocol)的上下文中,有状态和无状态协议(protocol)的优点/缺点是什么?我的直觉是无状态更好(考虑到更多 HTTP)使用简单的命令响应数据包,但我不确定为什么。我还与一位主管合作,他在使用带有序列号、连接建立方法等的有状态协议(protocol)方面有很多经验,他一直鼓励我使用有状态协议(protocol)。我们陷入了僵局,似乎无法说服对方采用正确的方法。
Another question about simple point-to-point communications protocols提出了一些很好的例子,即HDLC (有状态的)和 MODBUS (无国籍)。
最佳答案
如果您从对话的角度来看协议(protocol),那可能会更容易。
在无状态协议(protocol)中,没有“你好”或“再见”。每个请求都是简单的“给我那个”、“拿这个”等等,每个请求都是独立的。如果客户端给服务器一些东西,它不关心服务器用它做什么。如果客户端需要知道它刚刚给服务器的是什么,那么它会再次请求它来验证。
这(无状态)听起来不错,而且对两个独立的进程(服务器和客户端)也有好处,尤其是当它们松散耦合时。
但是如果有两个协作进程,这两个任务相互依赖并且一个需要另一个的输出才能使它们都成功,那么无状态会增加开销,因为每个通信和操作都需要通过问题进行验证.或者两者之间需要共享上下文。
想想外科医生和她的助手递给她的工具。外科医生说“scape”,当手术刀放在她手中时,她知道通信已经完成。 “有状态”助手可以跟踪通信状态,知道“scape”之后会发出“抽吸”或“牵开器”命令,并准备好适当的仪器。所以谈话有一个状态——开始和结束——“你好”和“再见”。这很好,因为它减少了延迟并降低了通信开销。
您可以使外科医生/助理协议(protocol)无状态 - 但这会影响整体结果的质量吗?
关于communication - 无状态协议(protocol)的参数(上下文 : simple point-to-point communication),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1947499/