什么时候HTTP请求丢失了?

时间:2011-01-25 11:10:39

标签: http curl mobile libcurl funambol

我需要从移动设备发送相当大的HTTP请求。在什么情况下请求丢失(以便发送的数据必须重新发送)?

例如,如果几秒钟没有无线连接,会发生什么?它取决于我无法控制的网络决策吗?

服务器上没有超时。我控制客户端,我们可以认为它是稳定的。 调用进入了一些Curl库(POSIX C ++,嵌入式Linux),并且我可以更改它的数量有限。

2 个答案:

答案 0 :(得分:0)

请求丢失的一些情况:

  • 移动设备中的电量丢失
  • 移动设备失去与网络的联系(无线电波无法到达目的地)
  • 移动设备上的编程错误/内存故障
  • 太多移动设备尝试同时发送数据
  • 无线电链路上的外部干扰
  • 网络基础设施中的电力丢失
  • 工人错误地切断电缆
  • 火灾,洪水,地震等...

然后服务器端出现了所有问题,例如内存不足,请求超时等等......

如果可能,请尝试将信息拆分为较小的段。如果出现问题,则需要重新发送的信息较少。


2011-01-27更新:

当我说有太多可能出错的事情if anything can go wrong, it will时,我可能听起来有点悲观。

在发射器方面,如果服务器发送某种确认,则很容易检查传输是否成功。它可以作为转移请求的答案或单独的查询发送。

根据您在服务器端使用的内容,您可能能够检测到连接是否丢失(并且该请求的所有数据也可能丢失)。我的观点是发送者有责任检查传输是否成功,如果不是则重新发送。

我不知道你有什么样的数据,但我很确定可以将它分成更小的块。然而,我无法决定它是否可取。但是如果你有移动设备并且传输数据需要很长时间,那么它可能就是。

答案 1 :(得分:0)

正如“某些人”所说,你应该将你的上传分成几部分,给它们编号并在另一端重新组装。我曾经写过一个web服务来做这件事,所以客户端会确认已经收到了具有正确校验和的特定部分(例如SHA-1哈希)。

如果由于超时或散列不匹配而未确认,则客户端应重新发送该部分。我建议根据预期的网络速度(慢网络较小的块)使每个块足够小,如1-10 kb。