【问题标题】:How to regulate sending requests to server?如何规范向服务器发送请求?
【发布时间】:2013-11-29 13:54:20
【问题描述】:

我需要向服务器发送很多请求 50-100 个请求来加载数据,每个响应至少有 0.5KB 和最多 7KB 的数据。

我使用 ajax 发送请求如下:(代码已简化)

for (var i=0; i<elements.length; i++) {
    var element = elements[i];
    // make ajax call with element as parameter and update page to show data for element
}

这可以满足我的需求,因为我不需要按顺序从服务器获取数据,而且它大部分时间都可以使用。 但是有时最后几个元素没有加载,我在我的 chrome javascript 控制台中收到 communication link failure 错误。

我假设服务器超载了,我该如何规范发送请求以确保我在尽可能短的时间内收到每个请求的响应?

注意事项:

  • 我在后端使用 Spring MVC
  • 我使用 ExtJS Ajax 发出请求

【问题讨论】:

  • 听起来您应该找到一种方法将其转换为一次发送/接收所有元素的数据的单个 AJAX 请求。特别是因为所有请求都发生在同一个 for 循环中;它们基本上已经相互关联了。
  • @Cuberto,我不想这样做有两个原因。 1)我不希望用户等待,我希望用户尽快看到每个元素的数据,以及 2)未来请求的数量可能会增加,这将使获取所有数据的速度变得特别慢一次。
  • 你能得到分段的数据吗?比如一次10个左右的元素?与一次发送数百个请求相比,每个请求发送大量数据效率更高,对服务器的压力也更小。特别是如果您想在生产环境中执行此操作,则不应发送太多请求。请记住,每个请求都有诸如 HTTP 标头之类的开销。

标签: javascript ajax spring-mvc extjs extjs4.1


【解决方案1】:

尝试在数据上传过程中使用单独的循环。过载是通信失败的唯一原因。

【讨论】:

  • 你能再解释一下吗?不知道你所说的单独循环是什么意思?我也在下载数据而不是上传。
  • 尝试使用两个单独的循环进行下载/上传过程。当在服务器上上传/下载大量日期时,服务器也会筋疲力尽。你可以做两件事。 1.使用部分循环,例如100次迭代使用2次循环进行50-50次迭代。(这是数据包背后的概念(在后续部分中破坏大文件))。 2.也可以尝试使用ajax或js进行后台下载。
【解决方案2】:

我通过递归调用每个请求来解决这个问题,这样一次只向服务器发送一个请求,避免了过载。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-20
    • 1970-01-01
    • 1970-01-01
    • 2020-03-13
    • 2018-08-28
    相关资源
    最近更新 更多