1

我正在使用SVGeocoder在 iOS 上访问 Google 的地理编码服务,但我遇到了一个非常奇怪的问题。在模拟器或连接到 wifi 的手机上进行测试时,地理编码工作得很好,但是一旦手机切换到 3G/4G,我开始收到“限制超过”错误。我只通过 3G/4G 发出了几十个请求,远未达到 2500 个请求的限制。这里会发生什么?

提前致谢!

更新:我最终通过延迟每个地理编码请求之间的时间解决了这个问题。我知道发送请求太快可能是个问题,但直到我读到这个,我才意识到它返回了相同的 QUERY_LIMIT_EXCEEDED 消息。

但是,这仍然没有回答为什么它在 wifi 上工作而不是在 3G/4G 上工作的问题。

4

1 回答 1

0

它在 Wifi 中有效,因为您随后使用自己的 IP 地址和提供商。在蜂窝网络中,您通过您的提供商运行请求,该提供商通常使用传出代理。因此,当 Google 收到请求时,它会看到所有客户的提供商代理的 IP,而不是您自己的 IP,这与 wifi 情况不同。

至少这是我在遇到类似问题时得出的结论,基于经验和数据包捕获。

  • 这意味着从您的提供商运行的蜂窝网络执行的每个请求似乎都来自 Google 的同一个 IP,从而增加了对该给定 IP 的请求数量,至少从 Google 服务器的角度来看是这样。因此,如果您、您的邻居和其他数百万人使用同一提供商向 Google 发送请求,并且该提供商使用相同的传出代理,Google 可能会为这数百万人/请求看到相同的 IP,并会考虑要达到的配额限制。

  • 如果您通过 wifi 网络运行请求,您将不会通过蜂窝网络提供商的传出代理,并且将拥有自己的传出 IP,并且在看到“LIMIT EXCEEDED”错误之前能够执行更多请求,因为只有您自己的请求会被计算在内。

我相信实际上这要复杂一些:您的提供商可能有多个传出代理并使用负载平衡来调度客户对它们的请求,Google 可能有一个数据库知道主要 CN 提供商的代理并相应地调整其配额限制,等等……但你明白了。

于 2012-10-03T20:55:01.150 回答