我正在BB10中绘制地图。地图被分成瓷砖。开始时,用户给出经度、纬度和缩放级别,地图显示在该坐标处。通过使用 QNetworkAccessManager 执行 http 请求,我得到了一个图块。首先下载 7x5 块。但问题是当用户开始非常快速地在屏幕上平移并继续这样做时,有时在用户停止平移后,瓷砖的下载延迟很大。每次用户平移时,都会下载一些新图块以显示在屏幕上。现在因为用户继续平移一段时间,所以使用 QNetworkAccessManager 有很多不必要的网络请求。我的猜测是这就是为什么瓷砖下载很慢。对于不必要的请求,我尝试使用 abort() 方法中止 QNetworkAccessManager 的 QNetoworkReply。但它仍然很慢。有没有其他方法可以实现我正在尝试的目标?谢谢。
问问题
860 次
1 回答
1
我个人认为问题在于您进行了太多不必要的连接。
通常,HTTP 被认为是一种重量级的协议。它建立在 TCP 之上,因此需要 3 次握手来建立和 4 次握手来终止,而不考虑生成和解析这些 HTTP 标头的时间。
还要考虑服务器的负载。一个小型普通 Web 服务器每秒处理约 100 个请求。如果您的客户端执行如此频繁的请求,恐怕服务器不会太高兴地欢迎您的应用程序。
所以考虑手动限制请求密度,要么只在平移速度低于阈值时发送请求,要么保持一个固定大小的挂起请求队列,仅当队列未满时才发出新请求。只是避免请求泛滥。无论您有什么优化,它对低带宽客户端或任何不太空闲的服务器都没有好处。
于 2013-04-20T11:59:58.900 回答