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


Node.js http.Agent用法及代碼示例


類:http.Agent

添加於:v0.3.4

Agent 負責管理 HTTP 客戶端的連接持久性和重用。它為給定的主機和端口維護一個待處理請求的隊列,為每個請求重用一個套接字連接,直到隊列為空,此時套接字或者被銷毀,或者被放入一個池中,以便再次用於請求到相同的主機和端口。是銷毀還是池化取決於 keepAlive option

池連接為它們啟用了 TCP Keep-Alive,但服務器仍可能關閉空閑連接,在這種情況下,它們將從池中刪除,並且當對該主機和端口發出新的 HTTP 請求時,將建立新的連接。服務器也可能拒絕允許同一連接上的多個請求,在這種情況下,必須為每個請求重新建立連接,並且不能被池化。 Agent 仍會向該服務器發出請求,但每個請求都將通過新連接發生。

當客戶端或服務器關閉連接時,它會從池中刪除。池中任何未使用的套接字都將被取消引用,以免在沒有未完成的請求時保持 Node.js 進程運行。 (見 socket.unref() )。

destroy() Agent 實例不再使用時,這是一個很好的做法,因為未使用的套接字會消耗操作係統資源。

當套接字發出 'close' 事件或 'agentRemove' 事件時,將從代理中刪除套接字。當打算長時間保持一個 HTTP 請求打開而不將其保留在代理中時,可以執行以下操作:

http.get(options, (res) => {
  // Do stuff
}).on('socket', (socket) => {
  socket.emit('agentRemove');
});

代理也可用於單個請求。通過將{agent: false} 作為http.get()http.request() 函數的選項提供,一次性使用帶有默認選項的Agent 將用於客戶端連接。

agent:false

http.get({
  hostname: 'localhost',
  port: 80,
  path: '/',
  agent: false  // Create a new agent just for this one request
}, (res) => {
  // Do stuff with response
});

相關用法


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