与 Superagent 保持连接

2024-01-12

我正在运行一个 node.js 服务器 A,它使用 superagent 向另一个服务器 B 发出 HTTP 请求。

我调查了服务器 B 上的请求并看到了标头connection being close和 httpVersion 是1.1:

var http = require('http');
var request = require('superagent');

http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.write('req.httpVersion seen on server:' + req.httpVersion);
  res.write('\nreq.headers.connection seen on server:' + req.headers.connection);
  res.end();
}).listen(1337, '0.0.0.0');

request
  .get('localhost:1337/helloword')
  .end(function (err, res) {
    console.log(res.text);
  });

这导致:

req.httpVersion seen on server:1.1
req.headers.connection seen on server:close

但是,如果我从浏览器访问同一服务器,我会得到:

req.httpVersion seen on server:1.1
req.headers.connection seen on server:keep-alive

From https://www.rfc-editor.org/rfc/rfc2616#page-172 https://www.rfc-editor.org/rfc/rfc2616#page-172我了解到keep-alive是 HTTP 1.1 的默认值,除非使用另外声明Connection: close.

所以,我的问题是:

  • 为什么 Superagent / Node.js 显式设置请求不使用 keep-alive / 持久连接?
  • 如何强制 Superagent / Node.js 使用保持活动连接?
  • 我如何进一步影响确切的行为(要保持打开的连接数、超时等)?

它似乎没有记录,但您可以使用以下功能将 http 代理传递给 superagentagent。 因此,您可以使用此模块创建一个保持活动代理:https://www.npmjs.org/package/agentkeepalive https://www.npmjs.org/package/agentkeepalive并将其传递给超级代理。

像这样的事情:

util = require('util');
util.debuglog = require('debuglog');
var http = require('http');
var request = require('superagent');
var Agent = require('agentkeepalive');

var keepaliveAgent = new Agent({
  maxSockets: 100,
  maxFreeSockets: 10,
  timeout: 60000,
  keepAliveTimeout: 30000 // free socket keepalive for 30 seconds
});

http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.write('req.httpVersion seen on server:' + req.httpVersion);
  res.write('\nreq.headers.connection seen on server:' + req.headers.connection);
  res.end();
}).listen(1337, '0.0.0.0');

request
  .get('localhost:1337/helloword')
  .agent(keepaliveAgent)
  .end(function (err, res) {
    console.log(res.text);
  });
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

与 Superagent 保持连接 的相关文章

随机推荐

  • 角度 js 工厂内的访问范围

    我正在使用离子框架 并且需要能够从代码中的多个位置调用弹出窗口 因此我想将其移至工厂中 弹出窗口使用输入字段 我想获取它的值 通常我会打电话 scope parentGate answer但因为它在工厂里 所以我无法访问范围 有什么想法如何
  • 使用 servlet 在 Java 中上传文件

    我正在使用 javazoom 进行上传 protected void processRequest HttpServletRequest request HttpServletResponse response throws Servlet
  • 拒绝可排序列表中无效的可排序项目

    我尝试了很多方法但没有成功 我有两个相互连接的可排序列表 问题是列表 A 可以接受其中的任何列表项 但是列表 B 只能接受具有 class abc 的项目 代码如下 ul li item A1 li li item A2 li li cla
  • mysql-connector不会导入到pycharm中的脚本中

    我已经使用 pip 成功安装了 mysql connector Installing collected packages mysql connector Running setup py install for mysql connect
  • 模块重新加载的 isinstance 行为

    给定以下两个 py 文件 aclass py class A object pass main py def importer klass Used to import classes from there python qalname i
  • 我可以从 bash 中的定界文档中读取行吗?

    这就是我正在尝试的 我想要的是最后一个echo循环说 一二三四测试1 它不起作用 read line即将空空如也 这里有什么微妙的地方吗 或者这根本行不通 array one two three echo array one two thr
  • Python:将utf-8字符串转换为字节字符串[重复]

    这个问题在这里已经有答案了 我有以下函数从字节序列中解析 utf 8 字符串 注意 length size 是表示 utf 8 字符串长度所需的字节数 def parse utf8 self bytes length size length
  • 如何在解析查询中包含超时?

    我的问题是关于 Android 的 parse com 查询 以及如果查询响应时间过长如何设置超时 例如 我有一个查询 我从 parse com 获取字符串列表 如果从 parse com 接收此查询需要很长时间 例如十秒 我希望用户能够取
  • int 的大小是否取决于编译器和/或处理器?

    整数的大小取决于编译器 操作系统和处理器吗 这个问题的答案取决于我们愿意脱离实际考虑的程度 最终 理论上 C 和 C 中的一切都取决于编译器 并且仅取决于编译器 硬件 操作系统根本不重要 编译器可以自由地实现硬件抽象层any厚度并模仿任何东
  • OpenERP/Odoo 上 _sql_constraints 和 _constraints 之间的区别?

    我注意到 Odoo ERP 有两种限制 但我想知道 sql constraints 与 constraints 之间有什么区别 sql constraints email uniq unique email Please enter Uni
  • Xslt 1.0 - 查找最后一次出现并获取之前的字符串

    我的问题类似于查找最后一次出现的情况 https stackoverflow com questions 3141847 xslt finding last occurance in a string 但是 我需要在最后一次出现分隔符之前输
  • 在 Linux SUSE 或 RedHat 上,如何加载 Python 2.7

    有人可以提供在 SUSE 和 RedHat 上安装 python 2 7 版本所需的步骤吗 那里的版本类似于 2 4 我需要至少 2 6 才能使我的脚本工作 因此 安装后 我可以在 xTerm 中输入 Python 并获得 Python 2
  • Java Bean 条件验证

    我有一个具有两个属性的类 我想使用 Java Bean 验证 但遇到一个问题 如何处理 class ProductRequest private String quantityType private double quantityValu
  • 在java中将双精度数分成两部分“整数和分数”的最佳方法是什么

    我尝试通过以下方法分离5 6 例如 private static double method double d int integerPart 0 double fractionPart 0 0 integerPart int d frac
  • 无法使用 ProcessStartInfo 参数将“”传递到 powershell,C#

    我无法将包含以下内容的参数传递给 powershell 当我使用等效代码但将应用程序更改为 cmd 时 都能够通过 我希望 powershell 执行的参数是 Copy Item Path Working Directory W11F as
  • 当业务逻辑和数据层似乎重叠时,分解它们的最佳设计是什么? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我正在构建一个 MVC Web 应用程序 使用 Spring MVC 框架 并且我对设计特定区域的最佳方法有点困惑 应用程序必须与一系列 Web
  • 具有一个片段的多布局视图页面

    我必须明确的是 我正在寻找一个示例或答案 我可以在视图页面中使用各种不同的布局设计 并且所有页面中的数据都是动态的 并且所有页面都可以由用户交互 我的用例和当前解决问题的方法 所以我有 8 种不同类型的问题类型 所以我创建了layouts对
  • 更新到.net 4.0后wcf回调异常

    我有一个 wcf 服务 它使用 DualHttpBindings 的回调 该服务在找到搜索结果时将其数据表推送回客户端 对于长时间运行的搜索 这在 Net 3 5 中运行良好 自从我更新到 Net 4 0 后 它就抛出了 System Ru
  • 在一个组件视图中完成的更改不会反映在角度 4 中的另一组件视图中

    在这里 我正在更改一个组件中的一些数据 例如 更改一个模块的用户个人资料图片 并且相同的个人资料图片应该反映在其他模块的另一个组件中 这些不是父 子组件 因此我正在导入模块和特定组件 调用组件的函数来分配个人资料图片的范围值 如果我在控制台
  • 与 Superagent 保持连接

    我正在运行一个 node js 服务器 A 它使用 superagent 向另一个服务器 B 发出 HTTP 请求 我调查了服务器 B 上的请求并看到了标头connection being close和 httpVersion 是1 1 v