首页 > 解决方案 > 在客户端堆积请求

问题描述

我从客户端向服务器发送 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);

}

标签: javascriptnode.jsserverrequestclient

解决方案


睡眠npm 文档中:

这些调用将通过停止 Node.js 的事件循环来阻止所有 JavaScript 的执行!


如果您需要绑定并发性以免使您的服务器不堪重负,您应该能够:

  • 使用池- 这应该允许您配置允许的最大请求数,这将允许您严格控制您打开到服务器的连接数,这样您就不会压倒它(我对节点不够熟悉为此推荐最佳实践)

推荐阅读