这有点奇怪,我不确定究竟发生了什么,但是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,速度大致相同。意思是我认为这个问题与网络有关。
答案 0 :(得分:0)
在节点0.10及更早版本中,HTTP代理仅同时打开5个 默认情况下连接到单个主机。您可以轻松更改此内容: (假设您已将HTTP模块视为http)
您可以通过设置maxSockets
来增加套接字数量http.globalAgent.maxSockets = 20; // or whatever
在https://stackoverflow.com/a/12061013/789377
了解详情它可能不会影响性能,但您使用的是http.get
http.request
。 Http.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