【问题标题】:Node.js long polling requestNode.js 长轮询请求
【发布时间】:2019-04-25 11:42:54
【问题描述】:

我正在尝试了解如何从我的 Node.js 应用程序中使用远程长轮询资源。我尝试使用“请求”包并且连接保持打开但我无法读取来自远程资源的数据。

谁能解释一下怎么做?

提前致谢。

【问题讨论】:

  • 您能详细说明一下吗?也许分享一些你写的代码?
  • 是的!需要对此进行更多说明。您能否在此处详细说明您尝试使用的资源。

标签: node.js long-polling


【解决方案1】:

终于找到解决办法了:

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 函数。

感谢您的宝贵时间!

【讨论】:

    猜你喜欢
    • 2013-06-12
    • 1970-01-01
    • 2021-10-13
    • 2012-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-11
    • 1970-01-01
    相关资源
    最近更新 更多