📜  Node.js http.globalAgent 属性(1)

📅  最后修改于: 2023-12-03 14:44:39.147000             🧑  作者: Mango

Node.js http.globalAgent 属性

在 Node.js 中,http.globalAgent 是一个全局的 Agent 类实例,用于管理 HTTP 请求的连接池。

概述

每当我们使用 Node.js 的 httphttps 模块发送一个 HTTP 请求时,Node.js 会创建一个新的 Agent 实例,该实例管理最多五个 TCP 连接以及与每个连接关联的请求队列。这意味着,在同一时间,同一个目标主机上的最多可以有五个并发请求。

这种模式可以节省一些 TCP 连接的创建和关闭开销,但是当我们需要执行大量的并发请求时,这五个并发连接可能不够用。此时,可以使用 http.globalAgent

用法

我们可以通过访问 http.globalAgent 属性来访问全局的 Agent 实例。

const http = require('http');
console.log(http.globalAgent);

输出结果:

Agent {
  _events: [Object: null prototype] {},
  _eventsCount: 0,
  _maxListeners: undefined,
  defaultPort: 80,
  protocol: 'http:',
  options: { path: null },
  requests: {},
  sockets: { '127.0.0.1:80:': [Array] },
  freeSockets: {},
  keepAliveMsecs: 1000,
  keepAlive: false,
  maxSockets: Infinity,
  maxFreeSockets: 256,
  scheduling: 'fifo',
  maxTotalSockets: Infinity,
  totalSocketCount: 1
}

我们还可以通过在创建 httphttps 请求时,传递 agent 属性来指定使用该全局 Agent 实例,比如:

const http = require('http');

// 禁用 Connection: keep-alive
http.get('http://example.com/', { agent: false }, (res) => {
  // 处理响应
});

// 使用 globalAgent
http.get('http://example.com/', { agent: http.globalAgent }, (res) => {
  // 处理响应
});
属性

http.globalAgent 包含以下属性:

  • defaultPort:默认端口号,用于没有指定端口号的请求。

  • protocol:默认协议,即 'http:'

  • options:默认选项。http.globalAgent 不接受任何选项。

  • requests:所有当前正在排队的请求。

  • sockets:所有当前打开的套接字。

  • freeSockets:当前可用的空闲套接字。

  • keepAliveMsecs:如果开启了 KeepAlive 功能,在客户端和服务器之间发送信息的时间间隔。

  • keepAlive:是否启用 KeepAlive 功能。

  • maxSockets:可同时使用的套接字的最大数量。

  • maxFreeSockets:单个套接字最大的空闲时间(毫秒数)。

  • scheduling:如何调度传入的请求。可选值包括 'fifo'(先进先出)和 'lifo'(后进先出)。

  • maxTotalSockets:总共可使用的套接字的最大数量。

  • totalSocketCount:当前已经使用的套接字数量。

参考