【问题标题】:When is a HTTP request lost?HTTP 请求何时丢失?
【发布时间】:2011-01-25 11:10:39
【问题描述】:

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

例如,如果几秒钟没有无线电连接会发生什么?这是否取决于我无法控制的网络中的某些决定?

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

【问题讨论】:

    标签: http curl mobile libcurl funambol


    【解决方案1】:

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

    如果由于超时或哈希不匹配而没有收到确认,客户端应重新发送该部分。我建议每个块足够小,例如 1-10 kb,具体取决于预期的网络速度(慢速网络更小的块)。

    【讨论】:

      【解决方案2】:

      请求丢失的一些情况:

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

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

      如果可能,请尝试将信息分成更小的部分。如果出现问题,需要重新发送的信息就会减少。


      2011 年 1 月 27 日更新:

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

      在发送方,很容易检查传输是否成功,服务器是否发送了某种确认。它可以作为传输请求的答案发送,也可以通过单独的查询发送。

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

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

      【讨论】:

      • 很难拆分消息,所以我试图了解传输何时丢失,以及我能做些什么。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-16
      • 1970-01-01
      相关资源
      最近更新 更多