如何管理node.js请求连接池?

时间:2013-06-28 23:19:55

标签: node.js request

我正在使用node.js Request模块发出多个帖子请求。

此模块是否具有连接池?

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

我们可以关闭开放连接吗?

我们如何处理socket hang up error

1 个答案:

答案 0 :(得分:18)

请求没有连接池。但是,http module(请求使用)会执行:

  

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

默认情况下,每台主机最多只能有5个并发连接。当前代理实现有an issue,当您尝试打开太多连接时会导致挂起错误。

你可以:

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

首先拥有HTTP代理有几个原因:

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

代理的行为在node.js doc中解释:

  

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

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