簡體   English   中英

Node.js長輪詢請求

[英]Node.js long polling request

我正在嘗試了解如何使用Node.js應用程序中的遠程長輪詢資源。 我嘗試使用“請求”包,但連接保持打開狀態,但無法讀取來自遠程資源的數據。

有人可以解釋我該怎么做嗎?

提前致謝。

終於找到了解決方案:

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

謝謝你的時間!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM