HTTP请求有很大的延迟

时间:2016-01-18 18:41:04

标签: node.js

这有点奇怪,我不确定究竟发生了什么,但是http请求有不同的延迟,有时会变得很大。我把它计时,

  process.time = new Date().getTime();
    console.log('voice ' + voice)

    var req = http.get(config.host_ip + ":" + config.host_port + "/sendSpeech/" + voice, function (response) {
      response.on('data', function (d) {
            console.log("TOTAL TIME " + (new Date().getTime() - process.time))
        });

    }).on('error', function (e) {
        // Call callback function with the error object which comes from the request

    });
    req.end();

有时候,总时间是亚秒级,有时则超过6秒。我计时实际运行它发送给它的功能的过程,它以低于100毫秒的速度运行。

如果我通过浏览器从服务器进行呼叫,它就会立即呼叫,这通常是次要的。比从单独的节点应用程序调用它快得多。

有谁知道发生了什么事?它处理的大多数连接大约是6-10,所以我不认为工作量特别重,尽管它运行在覆盆子pi上。

编辑:我使用的是Node 5.4.1。

编辑2:我刚尝试通过socket.io切换到websockets,速度大致相同。意思是我认为这个问题与网络有关。

1 个答案:

答案 0 :(得分:0)

  

在节点0.10及更早版本中,HTTP代理仅同时打开5个   默认情况下连接到单个主机。您可以轻松更改此内容:   (假设您已将HTTP模块视为http)

您可以通过设置maxSockets

来增加套接字数量
http.globalAgent.maxSockets = 20; // or whatever

https://stackoverflow.com/a/12061013/789377

了解详情

旁注

它可能不会影响性能,但您使用的是http.get http.requestHttp.get返回带有响应数据的回调。像

一样使用它
process.time = new Date().getTime();
console.log('voice ' + voice)

var url = config.host_ip + ":" + config.host_port + "/sendSpeech/" + voice;
http.get(url, function(res) {
  console.log("TOTAL TIME " + (new Date().getTime() - process.time))
}).on('error', function(e) {
    // Call callback function with the error object which comes from the request
});

// you don't need req.end since http.get automatically calls req.end