當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Node.js http.ClientRequest request.reusedSocket用法及代碼示例


request.reusedSocket

添加於:v13.0.0、v12.16.0
  • <boolean> 請求是否通過重用的套接字發送。

通過啟用keep-alive 的代理發送請求時,可能會重用底層套接字。但是如果服務器在不幸的時候關閉了連接,客戶端可能會遇到 'ECONNRESET' 錯誤。

const http = require('node:http');

// Server has a 5 seconds keep-alive timeout by default
http
  .createServer((req, res) => {
    res.write('hello\n');
    res.end();
  })
  .listen(3000);

setInterval(() => {
  // Adapting a keep-alive agent
  http.get('http://localhost:3000', { agent }, (res) => {
    res.on('data', (data) => {
      // Do nothing
    });
  });
}, 5000); // Sending request on 5s interval so it's easy to hit idle timeout

通過標記請求是否重用套接字,我們可以根據它進行自動錯誤重試。

const http = require('node:http');
const agent = new http.Agent({ keepAlive: true });

function retriableRequest() {
  const req = http
    .get('http://localhost:3000', { agent }, (res) => {
      // ...
    })
    .on('error', (err) => {
      // Check if retry is needed
      if (req.reusedSocket && err.code === 'ECONNRESET') {
        retriableRequest();
      }
    });
}

retriableRequest();

相關用法


注:本文由純淨天空篩選整理自nodejs.org大神的英文原創作品 request.reusedSocket。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。