繁体   English   中英

如何在不知道服务器上的数据量的情况下知道发出多少请求

[英]How to know how many requests to make without knowing amount of data on server

我有一个 NodeJS 应用程序,我需要从另一台服务器(第 3 方,我无法控制它)获取数据。 服务器要求您指定要返回的最大条目数以及偏移量。 因此,例如,如果服务器上有100个条目,我可以请求pageSize100offset0pageSize10 ,并使用offset 1,2,3 等执行 10 个请求并执行Promise.all (在计时时执行多个并发较小的请求会更快)。

var pageSize = 100;
var offsets = [...Array(totalItems / pageSize).keys()];
await Promise.all(offsets.map(async i => //make request with pageSize and offset));

唯一的问题是条目的数量发生了变化,并且服务器没有返回指示项目总数的属性。 我可以做这样的事情和while循环,直到服务器返回空:

var offset = 0;
var pageSize = 100;

var data = [];
var response = await //make request with pageSize and offset
while (response is not empty){
   data.push(response);
   offset++;
   //send another request

但这并不像上面发送多个并发请求那样高效/快速。

有没有什么好的方法可以处理服务器上数据的动态长度?

如果服务器没有给你一些关于有多少项目的提示,你可以做很多事情来并行化多个请求,因为你真的不想发送比需要更多的请求,而且你不想人为地提出你的请求对于少量项目,您可以并行运行更多请求。

您可以运行一些测试并找到一些实际限制。 服务器和您的客户端似乎可以接受您请求的项目的最大数量是多少(100?1000?10,000?100,000?),然后开始请求那么多。 如果它表明之后还有更多,则发送另一个类似大小的请求。

这样做的主要思想是最大限度地减少单独请求的数量并最大限度地增加您在一次调用中可以获得的数据。 这应该比更多的并行请求更有效,每个请求都请求更少的项目,因为它最终在另一端使用相同的服务器,并且必须提供所有数据的相同数据存储,因此在最少的单独请求中最少的往返可能是最好的。

但是,其中一些取决于目标主机的规模和架构,因此需要进行实验以查看实际效果最佳。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM