我可以看到,有状态协议可以减少像曲奇一样的"模拟状态".
但是测试变得更加困难,以确保您的实现是正确的并重新连接,并且会话延续可能非常难以处理.
总是使用无状态协议被认为是更好的做法,还是它真的是特定于域的?
我认为在处理有状态协议时身份验证变得更容易,但是还有其他原因你应该使用有状态协议吗?
无国籍的好处:
高可扩展性 (您可以向任何节点发送请求,您可以随时添加节点)
高可用性 (如果一个节点出现故障,则没有丢失的状态,只需将请求重新发送到另一个节点)
高速 (因为没有状态,结果可缓存)
状态对您的申请有多重要?您是否需要在不同机器之间保持恒定的数据流量,或者突发更有用?如果你正在编写一个IP电话类型的应用程序,那么你可能会想要一些相当有状态的东西,如果你可以逃脱无状态,它可能会更便宜,更容易这样做.有条不紊地做事情一定比较脆弱,因为如果连接的任何一端被丢弃或者连接本身出现故障,则会导致更高的数据丢失风险,而对于无状态连接,您更可能只需要等待一段时间并尝试再次.
它们确实是用于不同工作的不同工具,但鉴于在线无状态技术的易用性和普遍性,当您有选择时,从这个方向看是合乎逻辑的.
我认为它是特定领域的.如果您正在编写ping的道德等价物,那么无状态协议是正确的选择.另一方面,如果你正在写一个VNC,有状态肯定是要走的路.
至于何时选择哪一个,要记住两点.首先,虽然实现选择是/或,但问题空间是连续的.所有现实世界的任务至少都有一个小状态,问题是传递它的开销有多少和开销是值得在两端跟踪它的麻烦.其次,您通常处理协议栈,而不是单个协议; 确保所有生活都处于正确的水平可以极大地简化事情.