2017-05-30 52 views
-1

我们有一个应用程序创建订单并通过HTTP发送到服务器。如果服务器的HTTP响应无法到达客户端,服务器是否会引发异常?

  1. 客户机发送的命令作为HTTP请求
  2. Server处理它
  3. 服务器发送响应
  4. 服务器执行客户端收到响应并处理它的顺序
  5. 一些进一步的操作。

我一直在问什么有关步骤3中,响应不会得到客户端和迷失在路上。然后客户将尝试重新发送相同的订单。这会引入重复的订单问题。以及如何解决这个问题。

我想出了这样的想法,即客户端生成一个唯一的ID并发送到服务器,所以当客户端第二次发送它时,服务器可以知道它是重复的顺序,并且只会返回以前的响应。

但是我很快就记得HTTP建立在TCP之上,它应该有一个三方握手的数据连接。这意味着:

从客户端的角度来看,如果客户端没有收到来自服务器的任何响应,那么连接将保持到超时,然后抛出异常以让客户知道。

我的问题是:

  1. 从服务器的角度来看,它发出的响应后,怎么可能确定响应已达到客户端?

  2. 交通层应该有一个三方握手连接终止,以确保连接只有在客户端收到消息后才能关闭,对吗?因此,如果消息在途中丢失,服务器应该触发异常,对吗?

  3. 如果是这种情况,可以简单地通过确保服务器只在步骤3中没有异常时才执行step4来解决问题?任何其他解决方案,如果我的整个上述想法是错误的这个问题?

感谢

回答

0

整个想法是错误的。你需要查找幂等。基本上每个交易都需要是幂等的,这意味着应用两次或更多的交易不会比应用一次更有效。这通常通过在交易完成时记录在服务器上的唯一交易序列号来实现。

相关问题