如何处理同步请求中丢失/延迟的服务器响应?



我有一个客户机-服务器体系结构,其中客户机通过套接字向服务器发送同步请求。客户端在一定超时后定期重新发送请求(以防止客户端阻塞线程,在请求从未到达服务器的情况下)。经过一定次数的尝试后,客户端继续(即使服务器没有响应)。
然而,在这种情况下,可能会发生服务器在客户端继续后发送响应的情况,这会使客户端拥有错误的状态信息(因为客户端认为请求从未被服务器处理过)。

如何确保客户端可以在超时后继续运行,同时确保服务器端和客户端没有状态差异?

最终,这是一个无法解决的问题。客户端和服务器之间总是有不一致的可能。您能做的最好的事情是在获得更多信息时尝试修复不一致。在您的示例中,一旦来自服务器的响应到达,客户机就可以更新其状态视图。但是,来自服务器的响应也有可能永久丢失。在这种情况下,让客户端定期尝试使其状态与服务器的状态相协调可能是实用的。

在分布式计算文献中,这被称为"两将军问题"。

最新更新