10

我正在使用 node.js请求模块来发出多个发布请求。

这个模块有连接池吗?

我们可以管理这个连接池吗?

我们可以关闭打开的连接吗?

我们如何处理socket hang up error

4

1 回答 1

24

请求没有连接池。但是,http 模块(请求使用)会:

在节点 0.5.3+ 中,有一个新的 HTTP 代理实现,用于池化 HTTP 客户端请求中使用的套接字。

默认情况下,每个主机限制为 5 个并发连接。当前代理实现存在一个问题,当您尝试打开太多连接时会导致出现挂起错误。

您可以:

  • 增加最大连接数:http.globalAgent.maxSockets.
  • 完全禁用代理:传递{pool: false}给请求。

首先要有一个 HTTP 代理有几个原因:

  • 它可以防止您意外打开与主机的数千个连接(将被视为攻击)。
  • 对于 HTTP 1.1 keepalive,池中的连接将保持打开状态。
  • 大多数时候,maxSockets实际上取决于您所针对的主机。如果其他主机处理它,node.js 将非常乐意打开 1000 个并发连接。

代理的行为在 node.js 文档中进行了解释:

当前的 HTTP 代理还默认客户端请求使用 Connection:keep-alive。如果没有挂起的 HTTP 请求正在等待套接字变得空闲,则关闭套接字。这意味着节点的池在负载下具有保持活动的好处,但仍然不需要开发人员使用保持活动手动关闭 HTTP 客户端。

node.js 的异步架构使得打开新连接变得非常便宜。

于 2013-06-29T12:24:36.243 回答