Повторно использовать TCP-соединение с node-fetch в node.js - PullRequest
0 голосов
/ 21 июня 2020

Я использую эту функцию для вызова внешнего API.

const fetch = require('node-fetch');

fetchdata= async function (result = {}) {
  var start_time = new Date().getTime();

    let response = await fetch('{API endpoint}', {
      method: 'post',
      body: JSON.stringify(result),
      headers: { 'Content-Type': 'application/json' },
      keepalive: true

    });

  console.log(response) 
  var time = { 'Respone time': + (new Date().getTime() - start_time) + 'ms' };
  console.log(time)
  return [response.json(), time];
  
}

Проблема в том, что я не уверен, что node.js повторно использует TCP-соединение с API каждый раз, когда я использую эту функцию, хотя Я определил свойство keepalive.

Повторное использование TCP-соединения может значительно сократить время отклика
Любые предложения будут приветствоваться.

Ответы [ 2 ]

0 голосов
/ 21 июня 2020

Keep-alive не включен для используемого по умолчанию agent и в настоящее время не реализован напрямую в node-fetch, но вы можете легко указать custom- агент , где вы включаете опцию keep-alive:

const keepAliveAgent = new http.Agent({
    keepAlive: true
});

fetch('{API endpoint}', {
     ...
     agent: keepAliveAgent         
});
0 голосов
/ 21 июня 2020

Как указано в https://github.com/node-fetch/node-fetch#custom -agent

const fetch = require('node-fetch');

const http = require('http');
const https = require('https');

const httpAgent = new http.Agent({ keepAlive: true });
const httpsAgent = new https.Agent({ keepAlive: true });
const agent = (_parsedURL) => _parsedURL.protocol == 'http:' ? httpAgent : httpsAgent;

const fetchdata = async function (result = {}) {
    var start_time = new Date().getTime();

    let response = await fetch('{API endpoint}', {
        method: 'post',
        body: JSON.stringify(result),
        headers: { 'Content-Type': 'application/json' },
        agent
    });

    console.log(response)
    var time = { 'Respone time': + (new Date().getTime() - start_time) + 'ms' };
    console.log(time)
    return [response.json(), time];

}
...