在3G网络上上传数据时,我在Django的POST处理程序中随机获得IOError: request data read error
。Django为什么会引发这个异常的问题已经有了答案(摘要:据称是在客户端放弃TCP连接时发生的)。然而,在我的情况下,我试图解决潜在的问题。
从我尝试缩小问题范围的过程中,我发现:
- 在WiFi上无法复制
- 仅在GPRS上不可复制
- 可在各种类型的手机(Android和iPhone)和多个运营商上复制
- 似乎在某些地方没有发生
- 似乎发生在其他位置,特别是当我看到数据速度指示器在
3G
,H
和H+
(UMTS, HSDPA和HSPA+)之间切换时
我大胆的猜测是那里发生的事情是交换塔。那么,当3G在发射塔之间切换时,TCP连接会发生什么变化呢?
当您在一个性能良好的网络中切换时,TCP连接本身通常不会看到任何连接中断,即使它发生了,TCP通常也会简单地退出并重试。
在3G网络中实际上有不同类型的切换,这取决于你要从哪个"塔"连接到运营商的接入网中,以及接入节点依次连接到运营商的核心网中。这也取决于核心网络的配置方式——有些网络将在接入节点和核心节点之间有一对一的映射,有些网络将允许接入节点池共享核心节点,这将减少必须在一个核心节点和另一个核心节点之间传输的可能性。
下面的指南很好地概述了3G网络中的切换类型:http://www.3g4g.co.uk/Tutorial/ZG/zg_handover.html