javascript - 在客户端堆积请求
问题描述
我从客户端向服务器发送 10 个请求,并在每个请求后进入睡眠状态。但是请求并没有立即到达服务器。即,假设请求 1 在时间 t1 从客户端发送到服务器,请求 2 在时间 t2 从客户端发送到服务器,依此类推,直到请求 10 在时间 t10 从客户端发送到服务器。但是所有 10 个请求都在时间 t10 之后到达服务器。在某个地方,所有请求都在客户端堆积起来,直到最后一个请求,并在时间 t10 之后将所有 10 个请求发送到服务器。为什么会发生这种情况。这是客户端的代码。
var request = require('request');
var sleep = require('sleep');
require('console-stamp')(console, '[ddd mmm dd yyyy HH:MM:ss.l]');
var myObj = {name: "John", age: 31, city: "New York"};
var myJSON = JSON.stringify(myObj);
for(var a = 1; a<=10;a++){
var url = 'http://localhost:8081/reqSer1/' + myJSON + '/' + a;
console.log("request send");
request.get(url , function (error, response) {
console.log('error:', error); // Print the error if one occurred
console.log(response.body);
// Print the response status code if a response was received
});
sleep.sleep(2);
}
解决方案
从睡眠npm 文档中:
这些调用将通过停止 Node.js 的事件循环来阻止所有 JavaScript 的执行!
如果您需要绑定并发性以免使您的服务器不堪重负,您应该能够:
- 使用池- 这应该允许您配置允许的最大请求数,这将允许您严格控制您打开到服务器的连接数,这样您就不会压倒它(我对节点不够熟悉为此推荐最佳实践)
推荐阅读
- c++ - 使用类在 C++ 中存储和列出变量/方法是一种好习惯吗
- python - AysncResult 和 python 池中带有 error_callback 的回调之间的区别
- sql-server - SQL Server 2016 中内存优化表分区的替代方法
- ajax - 从Vue中的数组中删除嵌套对象
- java - 使用构造函数创建唯一 ID
- c# - 如何检查两个以上的值
? : ? - c# - Linux下的C#,WorkingDirectory不能正常工作
- r - 从一个更大的列表创建子列表
- sql - 如果列包含基于键列的值或空值,SQL 选择返回行
- javascript - 禁用按钮的两个逻辑运算符