如何处理同步请求中的 missing/delayed 服务器响应?

How to deal with missing/delayed server responses in synchronized requests?

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

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

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

在分布式计算文献中,这被称为 Two Generals' Problem