ios - POST 请求花费的时间超过超时导致重复

标签 ios tcp network-programming duplicates alamofire

我有一个 iOS 应用程序,每次事务完成时,我都会将事务POST 到 API。从服务器获得 200 响应代码 后,我更新交易的属性:

newTransaction.Synced = true

如果网络连接断开,我还会POST每个事务,其中 Synced = false 当 Reachability 检测到网络连接时。

在完美的网络条件下,这很有效。然而,当我在我的 iPad 上启用 Network Link Conditioner 并将丢包率设置为 40% 时,我开始在我的服务器上看到重复的事务。我假设正在发生的事情是,由于丢包率高,发送我的请求并从服务器获得响应所花费的时间超过 30 秒(请求的客户端超时)。

为了证实这一点,我让我的 API 为每个 Web 请求休眠 40 秒,并禁用网络链接调节器。正如预期的那样,iOS 应用从不Synced 属性设置为true,因为它在收到响应之前超时。然而,服务器仍然为每次 iOS 应用程序启动或获得网络连接时生成的每个 POST 请求创建实体。

处理这种情况以防止出现重复的最佳方法是什么?我确实考虑过将 GUID 添加到事务中,然后对 API 进行编码,以便在 GUID 已经存在的情况下不重新添加事务。然而,另一方面是 iOS 应用程序永远不会知道交易已成功同步。有没有更好的方法来处理这个问题?也许是服务器也遵守的请求超时?

最佳答案

您将 GUID 分配给事务的想法很好,但您可能需要在客户端(浏览器内存)维护一个表,该表将保存您对服务器所做的所有调用的记录,但从未收到回复。

关于ios - POST 请求花费的时间超过超时导致重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34422727/

相关文章:

iOS 框架 : what is ABT (ABTViewSelectorComponent, ABTWeakValue、ABTDestructonomicon 等)?

ios - 即使排列的 subview 被隐藏,UIStackView 似乎也会堆叠间距

ios - 上传视频文件到服务器

java - 如何在 JAVA 中更改服务器套接字连接的回复端口

ios - 通过本地网络从 iOS 设备浏览桌面文件

ios - 以编程方式填充图像

javascript - 通过javascript通过tcp ip发送命令

C# 为什么 "Flush"不强制字节通过网络流传输?

java - 如何将 Java 网络服务器添加到 OSGI 包中

sockets - 当您需要可靠的 UDP 时,您使用什么?