阿西河

所有教程

公众号
🌙
阿西河前端的公众号

我的收藏

    最近访问  (文章)

      教程列表

      抓包专区
      测试专区

      Node.js http.Agent 类

      Node.js http.Agent 类

      新增于: v0.3.4

      Agent 负责管理 HTTP 客户端的连接持久性和重用。 它为给定的主机和端口维护一个待处理请求队列,为每个请求重用单独的套接字连接,直到队列为空,此时套接字被销毁或放入连接池,以便再次用于请求到同一个主机和端口。 销毁还是放入连接池取决于 keepAlive 选项。

      连接池中的连接已启用 TCP Keep-Alive,但服务器仍可能关闭空闲连接,在这种情况下,它们将从连接池中删除,并且当为该主机和端口发出新的 HTTP 请求时将建立新连接。 服务器也可以拒绝通过同一连接允许多个请求,在这种情况下,必须为每个请求重新建立连接,并且不能放入连接池。 Agent 仍将向该服务器发出请求,但每个请求都将通过新连接发生。

      当客户端或服务器关闭连接时,它将从连接池中删除。 连接池中任何未使用的套接字都将被销毁,以便当没有未完成的请求时不用保持 Node.js 进程运行。 (参阅 socket.unref())。

      当不再使用时最好 destroy() Agent 实例,因为未使用的套接字会消耗操作系统资源。

      当套接字触发 ‘close’ 事件或 ‘agentRemove’ 事件时,则套接字将从代理中删除。 当打算长时间保持一个 HTTP 请求打开而不将其保留在代理中时,可以执行以下操作:

      http.get(options, (res) => {
        // 做些事情。
      }).on('socket', (socket) => {
        socket.emit('agentRemove');
      });
      

      代理也可以用于单个请求。 通过提供 {agent: false} 作为 http.get() 或 http.request() 函数的选项,则将使用一次性的具有默认选项的 Agent 用于客户端连接。

      agent:false 的示例:

      http.get({
        hostname: 'localhost',
        port: 80,
        path: '/',
        agent: false  // 仅为此一个请求创建一个新代理。
      }, (res) => {
        // 用响应做些事情。
      });
      

      更多内容请参考:Node.js HTTP,或者通过 点击对应菜单 进行查看;


      目录
      本文目录
      目录