Google Maps在某些情况下会返回OVER_QUERY_LIMITS状态。我正在寻找有关这些条件的详细信息。
我可以在延迟后重新提交路线服务路线请求来处理状态。我已经能够通过使用几个幻数'来管理和限制请求,从而最大限度地减少OVER_QUERY_LIMITS状态的数量。 setTimeout延迟。我担心的是,虽然这些神奇的数字'在我的机器上为我工作,在他们设置当天我的网络连接,在其他情况下可能是合适的。
有没有人有解决OVER_QUERY_LIMIT问题的经验,特别是对于不易受上述任何影响的自适应策略?
编辑---------------------------------------------- -----------------------
似乎问题可能不完全清楚。我发现并了解在线文档。问题在于它意味着什么,细节是什么,以及处理它们的策略。特别是:
每秒多少请求是什么""?它是1还是5或50还是什么?它是如何确定的?它的回应是什么?它如何随着使用而改变?
什么策略,特别是适应性策略,似乎可以解决这个问题?
再次编辑:也许它还不清楚。 ------------------------------------
在路线服务请求的特定情况下:
更一般地说,是否有人知道这些与其他谷歌地图服务有何变化?
答案 0 :(得分:2)
Google的服务受限于配额和速率限制(可能取决于服务器负载)。
From the documentation on OVER_QUERY_LIMIT in the web services
超出使用限制
如果超出使用限制,您将获得OVER_QUERY_LIMIT状态代码作为回复。
这意味着Web服务将停止提供正常响应并切换到仅返回状态代码OVER_QUERY_LIMIT,直到再次允许更多使用。这可能发生:
- 如果因为您的应用程序每秒发送的请求过多而收到错误,则会在几秒钟内完成。
- 在接下来的24小时内,如果因为您的应用程序每天发送了太多请求而收到错误。重置服务的每日配额的时间因客户和每个API而异,并且可能会随着时间的推移而发生变化。
收到状态代码为OVER_QUERY_LIMIT的响应后,您的应用程序应确定已超出哪个使用限制。这可以通过暂停2秒并重新发送相同的请求来完成。如果状态代码仍为OVER_QUERY_LIMIT,则您的应用程序每天发送的请求过多。否则,您的应用程序每秒发送的请求过多。
答案 1 :(得分:1)
虽然引用文档似乎很流行,但似乎没有人真正了解每秒实际的请求数或者实际使用的算法。一些调查表明,最可能的算法是衰减率函数。我已经证明可以在突发中发出许多(> 15)请求,但是然后它只能在> 1000毫秒内发出一些(< 4)请求。一个显着的暂停允许重复相似但数量较小的数字。
我最终采用了排队限速功能。虽然它不是最快的方法(无法利用突发特性)但它很简单,并且看起来非常强大且极少有OVER_QUERY_LIMIT错误。
答案 2 :(得分:1)
当您尝试每秒请求超过8或9时,会出现此错误。 我通过以下代码解决了这个问题。
function(response, status) {
if (status === 'OK') {
var directionsDisplay = new google.maps.DirectionsRenderer();
directionsDisplay.setMap(map);
directionsDisplay.setDirections(response);
}
else if (status == google.maps.GeocoderStatus.OVER_QUERY_LIMIT) {
wait = true;
setTimeout("wait = true", 2000);
//alert("OQL: " + status);
}