Длинный опросный запрос Node.js - PullRequest
0 голосов
/ 25 апреля 2019

Я пытаюсь понять, как использовать ресурс удаленного длинного опроса из моего приложения Node.js. Я попытался с пакетом «запрос», и соединение остается открытым, но я не могу прочитать данные, поступающие с удаленного ресурса.

Может кто-нибудь объяснить мне, как это сделать?

Заранее спасибо.

1 Ответ

1 голос
/ 26 апреля 2019

Наконец-то нашли решение:

const https = require('https');
const Agent = require('agentkeepalive').HttpsAgent;

const keepaliveAgent = new Agent({
  maxSockets: 100,
  maxFreeSockets: 10,
  freeSocketTimeout: 30000, // free socket keepalive for 30 seconds
});

const options = {
  host: 'server',
  port: port,
  auth: 'username:password',
  path: '/path',
  method: 'POST',
  agent: keepaliveAgent,
  headers: {
        'Accept': 'application/json'
  }
};

makeRequest();

function makeRequest(){
  const req = https.request(options, res => {
    console.log('STATUS: ' + res.statusCode);
    console.log('HEADERS: ' + JSON.stringify(res.headers));
    res.setEncoding('utf8');
    res.on('data', function (chunk) {
      console.log('BODY: ' + chunk);
    });
  });
  req.on('error', e => {
    console.log('problem with request: ' + e.message);
    makeRequest();
  });
  req.end();

  }

setInterval(() => {
  if (keepaliveAgent.statusChanged) {
    if(keepaliveAgent.getCurrentStatus().resetStatus != 0){
            keepaliveAgent.setCurrentStatus();
            makeRequest();
    }
  }
}, 2000);

Необходимые пакеты:

  • https
  • agentkeepalive

Пользовательские модификации: Каждый раз, когда конечная точка сервера перезапускается, соединения закрывают сокет, и он не переподключается. Чтобы справиться с этим, я изменил node_modules / agentkeepalive / lib / agent.js и добавил новое значение с именем resetStatus и новую функцию setCurrentStatus, поэтому каждый раз, когда соединение закрывается, счетчик сбрасывается до 0 и снова вызывает функцию makeRequest.

Спасибо за ваше время!

...